【发布时间】:2016-05-26 14:06:14
【问题描述】:
我正在使用AutowireCapableBeanFactory 在另一个类中手动实例化的组件上使用@Async 注释:
AutowireCapableBeanFactory factory = applicationContext.getAutowireCapableBeanFactory();
factory.autowireBean(object);
factory.initializeBean(object, "MyObject");
我的问题是在 object 上调用异步方法的类正在手动创建 Spring 上下文,这意味着我无法在其中自动装配 object,并且 @Async 注释在这种情况下似乎不起作用.
这是我的 spring 上下文实例化:
@Component
@Scope("prototype")
@ComponentScan({ "com.package.my" })
public class Application {
private static ApplicationContext applicationContext;
public Application() {
if (applicationContext == null) {
applicationContext = new AnnotationConfigApplicationContext(Application.class);
}
}
}
我通过使用 Proxy 类解决了这个问题,因为 @Autowired 在使用 AutowireCapableBeanFactory 时工作正常,所以我的对象在其中自动装配。
也就是说,我对这个解决方案并不满意,因为它需要我创建一个没有其他用途的中间类,而且我很确定在手动创建 @Async 注释时可以工作对象。
有没有更好的方法来做到这一点?
谢谢。
【问题讨论】:
-
不要手动创建对象(也不要创建上下文实例,除非你想有奇怪的内存问题、事务奇怪等)。
-
捕获并使用
initializeBean的返回值。 -
@M.Deinum 我别无选择,我的应用程序被用作另一个不是 Spring 应用程序的应用程序的库。
-
@SotiriosDelimanolis 它确实有效,谢谢。我让你发布一个答案,这样你就可以得到它的功劳:)
标签: java spring asynchronous