Java注释不适用于Callable

时间:2017-07-01 19:29:46

标签: java annotations aspectj

我已经编写了一个注释(在Spring启动应用程序中)并尝试将其应用于call()的{​​{1}}方法,但它不起作用,但另一方面,当应用时一个正常的方法(请看下面的代码),它的工作原理,这一直困扰着我,你能不能给我一些线索?非常感谢你。

这是我的代码,

Callable

1 个答案:

答案 0 :(得分:0)

受@sbjavateam的启发,我意识到这三件事,

  1. spring aop work only with object that are managed by spring container. To apply aspect for your class it should be a bean or component and instantiated by spring context.(好的,这是从@ sbjavateam回答的。)
  2. 基于前一个语句,Callable c1 = new DummyCallable(1, 100000);本质上是错误的,因为我们必须从spring上下文创建DummyCallable(这样bean才能正确地注入它的依赖关系),调用new无法使用。
  3. DummyCallable类需要具有原型范围,以便它不是单例。单例范围是Spring bean的默认范围。因此,此类必须具有此注释:@Scope("prototype")
  4. 以下是我的修复,

    @Component
    @Scope("prototype")
    public class DummyCallable implements Callable<Integer> {}
    
    
    private DummyCallable createDummyCallable(Integer start, Integer end) {
            return context.getBean(DummyCallable.class, start, end);
        }
    

    此外,您可能也需要此配置,

    spring.aop.proxy-target-class=true
    

    最后但同样重要的是,非常感谢,@ sbjavateam。