Java 根据建议的对象调用位置应用方面 请考虑以下内容:我们有一个Spring Bean B/COD>,建议用多个方面: A1 < /代码>, A2 < /代码>。我们还有一些其他的SpringBean:X,Y,Z-并且B被注入到所有的SpringBean中。问题是:我们如何根据调用B的bean(X,Y,Z)应用或不应用B?在我的特定任务中,当从特定bean(例如,Z)调用B时,我需要绕过一个方面(例如,A2),而在其他调用中,必须应用所有方面。

Java 根据建议的对象调用位置应用方面 请考虑以下内容:我们有一个Spring Bean B/COD>,建议用多个方面: A1 < /代码>, A2 < /代码>。我们还有一些其他的SpringBean:X,Y,Z-并且B被注入到所有的SpringBean中。问题是:我们如何根据调用B的bean(X,Y,Z)应用或不应用B?在我的特定任务中,当从特定bean(例如,Z)调用B时,我需要绕过一个方面(例如,A2),而在其他调用中,必须应用所有方面。,java,spring,aop,spring-aop,Java,Spring,Aop,Spring Aop,这个决定非常简单Z包含对B的引用,该引用属于建议的类型。此接口允许访问建议对象的不同属性,包括其方面。这允许创建新的建议对象,该对象仅包括B所需的方面。下面是代码片段 所有类型和标识符都是针对原始问题中的示例给出的B是ab接口,B是参考。代码片段来自Zbean Class<?>[] classes = {B.class}; AdvisedSupport config = new AdvisedSupport(classes); try { config.setTargetSo

这个决定非常简单
Z
包含对
B
的引用,该引用属于
建议的类型
。此接口允许访问建议对象的不同属性,包括其方面。这允许创建新的建议对象,该对象仅包括
B
所需的方面。下面是代码片段

所有类型和标识符都是针对原始问题中的示例给出的
B
是ab接口,
B
是参考。代码片段来自Zbean

Class<?>[] classes = {B.class};
AdvisedSupport config = new AdvisedSupport(classes);
try {
    config.setTargetSource(((Advised) b).getTargetSource());
} catch (Exception e) {
    e.printStackTrace();
}
for (Advisor advisor : ((Advised) b).getAdvisors()) {
    Advice advice = advisor.getAdvice();
    if ((advice instanceof AbstractAspectJAdvice) && "advice.A2".equals(
            ((AbstractAspectJAdvice) advice).getAspectName())) {
        // Do not add A2 advisor
    } else {
        config.addAdvisor(advisor);
    }
}
DefaultAopProxyFactory factory = new DefaultAopProxyFactory();
B newB = (B)factory.createAopProxy(config).getProxy();
Class[]classes={B.Class};
AdvisedSupport配置=新建AdvisedSupport(类);
试一试{
config.setTargetSource(((建议)b.getTargetSource());
}捕获(例外e){
e、 printStackTrace();
}
对于(Advisor:((Advised)b).getadvisor()){
Advice Advice=advisor.getAdvice();
if((AbstractAspectJAdvice的通知实例)&&&“advice.A2”。等于(
((AbstractAspectJAdvice)advice.getAspectName()){
//不要添加A2顾问
}否则{
config.addAdvisor(advisor);
}
}
DefaultAopProxyFactory=新的DefaultAopProxyFactory();
B newB=(B)factory.createAopProxy(config.getProxy();

现在,
newB
reference已经可以使用了。

这个决定非常简单
Z
包含对
B
的引用,该引用属于
建议的类型
。此接口允许访问建议对象的不同属性,包括其方面。这允许创建新的建议对象,该对象仅包括
B
所需的方面。下面是代码片段

所有类型和标识符都是针对原始问题中的示例给出的
B
是ab接口,
B
是参考。代码片段来自Zbean

Class<?>[] classes = {B.class};
AdvisedSupport config = new AdvisedSupport(classes);
try {
    config.setTargetSource(((Advised) b).getTargetSource());
} catch (Exception e) {
    e.printStackTrace();
}
for (Advisor advisor : ((Advised) b).getAdvisors()) {
    Advice advice = advisor.getAdvice();
    if ((advice instanceof AbstractAspectJAdvice) && "advice.A2".equals(
            ((AbstractAspectJAdvice) advice).getAspectName())) {
        // Do not add A2 advisor
    } else {
        config.addAdvisor(advisor);
    }
}
DefaultAopProxyFactory factory = new DefaultAopProxyFactory();
B newB = (B)factory.createAopProxy(config).getProxy();
Class[]classes={B.Class};
AdvisedSupport配置=新建AdvisedSupport(类);
试一试{
config.setTargetSource(((建议)b.getTargetSource());
}捕获(例外e){
e、 printStackTrace();
}
对于(Advisor:((Advised)b).getadvisor()){
Advice Advice=advisor.getAdvice();
if((AbstractAspectJAdvice的通知实例)&&&“advice.A2”。等于(
((AbstractAspectJAdvice)advice.getAspectName()){
//不要添加A2顾问
}否则{
config.addAdvisor(advisor);
}
}
DefaultAopProxyFactory=新的DefaultAopProxyFactory();
B newB=(B)factory.createAopProxy(config.getProxy();
现在,
newB
reference已经可以使用了