我已经编写了一个注释(在Spring启动应用程序中)并尝试将其应用于call()
的{{1}}方法,但它不起作用,但另一方面,当应用时一个正常的方法(请看下面的代码),它的工作原理,这一直困扰着我,你能不能给我一些线索?非常感谢你。
这是我的代码,
Callable
答案 0 :(得分:0)
受@sbjavateam的启发,我意识到这三件事,
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回答的。)Callable c1 = new DummyCallable(1, 100000);
本质上是错误的,因为我们必须从spring上下文创建DummyCallable
(这样bean才能正确地注入它的依赖关系),调用new
无法使用。DummyCallable
类需要具有原型范围,以便它不是单例。单例范围是Spring bean的默认范围。因此,此类必须具有此注释:@Scope("prototype")
。以下是我的修复,
@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。