当类被@Scope(BeanDefination.SCOPE_PROTOTYPE)修饰时,说明每次依赖注入时,都会产生新的对象,具体可参见文章:
http://blog.csdn.net/gst6062825/article/details/8765157
通过上面的方式,使用 getApplicationContext (). getBean()能保证每次拿到的都是新创建的LoadData对象,而如果是在 MyMultiThread中通过 @Autowired去依赖注入,就不能(不会)每次都创建新的LoadData对象,除非是创建了多个
但是在
多线程编程中,如果一个类被
@Scope(BeanDefination.SCOPE_PROTOTYPE)修饰,且在另外的对象中如果需要引用此对象时,最好不要使用@Autowired依赖注入,而是使用 ApplicationContext.getBean()的方式去调用。
举例说明:
下面的这个类被
@Scope
(
BeanDefinition
.
SCOPE_PROTOTYPE
)
,
@Component
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public class LoadData extends Thread {
...}
在MyMultiThread.java中需要多次使用上面的LoadData.java对象,每次都需要重新创建新的对象
@Component
public class MyMultiThread{
.....
for (多次) {
LoadData loadData =XXX.getApplicationContext().getBean( LoadData .class);
loadData .start();
}
}
通过上面的方式,使用 getApplicationContext (). getBean()能保证每次拿到的都是新创建的LoadData对象,而如果是在 MyMultiThread中通过 @Autowired去依赖注入,就不能(不会)每次都创建新的LoadData对象,除非是创建了多个
MyMultiThread对象,而这并不是我们希望做的。
总结:
当类被
@Scope(BeanDefination.SCOPE_PROTOTYPE)修饰时,推荐使用
getApplicationContext
().
getBean()去获取对象;
当类没有被@Scope(BeanDefination.SCOPE_PROTOTYPE)修饰时,可以使用@Autowired按类型自动注入,减少编码;
原文地址:http://www.cnblogs.com/ssslinppp/