spring不用注解怎么获取bean对象,spring注入bean的三种方式
目录
bean注入无效,new创建对象差异。项目中使用了以下代码来检查代码。发现bean注入和new的区别主要是解耦。
00-1010注意!如果直接新建,该类中的自动连线将不会生效。
00-1010然后在运行时,发现通过@Autowired注入的对象capitalDetailDOMapper和excelRecordDOMapper的值为null。
公共类ExcelListener扩展了AnalysisEventListenerList { @ Autowiredprivate CapitalDetailDOMapper CapitalDetailDOMapper;@ autowired private ExcelRecordDOMapper ExcelRecordDOMapper;……}一开始我以为ExcelListener没有添加bean扫描评论。
所以加了之后
@Componentpublic类ExcelListener扩展了AnalysisEventListenerList { @ autowired private CapitalDetailDOMapper CapitalDetailDOMapper;@ autowired private ExcelRecordDOMapper ExcelRecordDOMapper;…}运行时的结果,两个映射器,仍然为空。
00-1010在这个类ExcelListener的使用场景中,是Excel Listener Excel Listener=New Excel Listener();创建的对象
这里理解为,通过new手动创建管理对象不同于通过spring容器创建管理对象。手动创建新对象并使用@autowire对其进行内部注释是无效的。
要使此自动关联生效,您需要通过容器管理对象。
修改如下:首先在ExcelListener中添加annotation @Component。
@ Scope(" prototype ")@ Component(" excelListener ")公共类excel listener扩展AnalysisEventListenerList { @ Autowiredprivate CapitalDetailDOMapper CapitalDetailDOMapper;@ autowired private ExcelRecordDOMapper ExcelRecordDOMapper;…}这样这个bean就会被加载到spring容器中,其中Scope表示bean的作用域,spring默认创建的对象是singleton。
原型是一个独特的例子。在这里,我主要想在不同的线程中创建不同的ExcelListener实例。
你可以通过容器或者直接@autowire来获取bean。
excel listener excel listener=spring beanutils . get bean(" excel listener ");其中SpringBeanUtils是实现BeanFactoryPostProcessor接口的实现类。
您可以从spring容器中获得bean的实例。如果bean是非单例的,那么每次都可以获得一个新的bean。
@Component@Getterpublic类SpringBeanUtils实现了BeanFactoryPostProcessor { private static ConfigurableListableBeanFactory bean factory;public static T get bean(String bean name){ return(T)bean factory . get bean(bean name);} public static T get bean(Class bean clz){ return bean factory . get bean(bean clz);} @ override public void postprocessbean factory(configurablelistablebean factory)抛出bean exception { spring bean utils . bean factory=bean factory;}}注意!如果A类是singleton,那么B类(A类的成员)被声明为non-singleton,这也是无效的。
因为类A只有一个实例,所以它只包含类B的一个实例。除非可以再次创建类A的实例,否则可以创建另一个类B的实例对象。
bean注入无效和new创建对象区别
我们要在spring的配置文件中使用DataSource,对吗?
多个bean将通过引用ref=dateSource 引用此bean。当我们要修改这个的时候,只需要修改引用就可以了,不需要修改太多。
00-1010举个例子,如果你在几个类中有一个类A,如果你想调用A的方法new,那么你应该在每个类中都有new A()。
对于spring来说,配置一个用于注入的bean就足够了。
不需要A类换成B类的时候~把bean里的类换成B类就行了。
如果用新的,还得换几个地方~
以上个人经验,希望能给大家一个参考,也希望大家能支持盛行的IT。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。