首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将方面限制为用名称指定的bean?

如何将方面限制为用名称指定的bean?
EN

Stack Overflow用户
提问于 2017-03-16 13:57:57
回答 1查看 974关注 0票数 1

我有以下界面:

代码语言:javascript
复制
public interface Performance {
    public void perform();
}

由以下类实现:

代码语言:javascript
复制
@Component
public class Woodstock implements Performance {

    public void perform() {
        System.out.println("Woodstock.perform()");
    }
}

我想申请的方面是:

代码语言:javascript
复制
@Aspect
public class Audience {

    @Pointcut("execution(* concert.Performance.perform(..)) "
            + "&& bean('woodstock')"
            )
    public void performance() {}


    @Around("performance()")
    public void watchPerformance(ProceedingJoinPoint jp) {
        try {
            System.out.println("Taking seats");
            jp.proceed();
            System.out.println("CLAP CLAP CLAP!!!");
        } catch (Throwable e) {
            System.out.println("Demanding a refund");
        }
    }
}

程序的配置文件声明以下bean:

代码语言:javascript
复制
@Bean
public Audience audience(){
    return new Audience();
}

@Bean
public Performance woodstock(){
    return new Woodstock();
}

我要做的测试是:

代码语言:javascript
复制
@Autowired
ApplicationContext context;

@Autowired
@Qualifier("woodstock")
Performance performance;

@Test
public void test(){
    printBeanNames();
    performance.perform();
}

现在,在我在注释中指定的面向对象类中,我希望从接口concert.Performance (execution(* concert.Performance.perform(..)))为perform()方法应用方面,并且我明确地将方面的应用限制在名为"woodstock“(&& bean('woodstock'))的bean上。

但是当我运行它时,我发现这个方面没有应用于woodstock bean,尽管这个bean正在使用(它打印Woodstock.perform())。

如果我没有使用bean(),而是使用了!bean(),那么它就能工作,因此它似乎不能将该bean视为名为"woodstock“的bean。

上面的代码有什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-17 01:13:14

特殊的Spring bean()切入点像bean(myBean)bean(*Bean)一样工作,根据春季AOP文档没有内联单引号或双引号(在本章中向下滚动一点)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42836171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档