@Scope(BeanDefination.SCOPE_PROTOTYPE) 心已赠人 2023-02-12 13:24 1阅读 0赞 ###### 如果类被@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来引用该实例。
还没有评论,来说两句吧...