@Scope(BeanDefination.SCOPE_PROTOTYPE)

如果类被@Scope(BeanDefination.SCOPE_PROTOTYPE)修饰时,那么每次依赖注入时,都会产生新的对象。如果要达到这个目的,最好不要使用@Autowired依赖注入

在多线程编程中,如果一个类被@Scope(BeanDefination.SCOPE_PROTOTYPE)修饰,且在另外的对象中如果需要引用此对象时,最好不要使用@Autowired依赖注入,而是使用 ApplicationContext.getBean()的方式去调用。

举例说明:
@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对象,换句话说,在同一个对象里面LoadData总是同一个实例,不同的对象才会创建不同的LoadData实例,而这并不是SCOPE_PROTOTYPE希望做的。 所以当类被SCOPE_PROTOTYPE标记后,不推荐使用Autowired来引用该实例。

你可能感兴趣的:(java,spring)