欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳談spring中bean注入無效和new創(chuàng)建對象的區(qū)別

 更新時間:2022年02月25日 10:13:33   作者:公眾號:程序員與王子喵?歡迎關(guān)注  
這篇文章主要介紹了spring中bean注入無效和new創(chuàng)建對象的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

bean注入無效和new創(chuàng)建對象區(qū)別

注意!如果直接new的話,類里面的autowire將不生效

項目中用到如下代碼

然后 在運行的時候發(fā)現(xiàn) 通過 @Autowired注入的對象 capitalDetailDOMapper和 excelRecordDOMapper的值為null

public class ExcelListener extends AnalysisEventListener<List> {
@Autowired
private CapitalDetailDOMapper capitalDetailDOMapper;
@Autowired
private ExcelRecordDOMapper excelRecordDOMapper;
…
}

剛開始以為是ExcelListener沒有加bean掃描注解導致的

于是加上后

@Component
public class ExcelListener extends AnalysisEventListener<List> {
@Autowired
private CapitalDetailDOMapper capitalDetailDOMapper;
@Autowired
private ExcelRecordDOMapper excelRecordDOMapper;
…
}

結(jié)果在運行的時候,兩個mapper,仍然為null。

檢查代碼發(fā)現(xiàn)

在ExcelListener這個類的使用場景中,是 ExcelListener excelListener= new ExcelListener(); 創(chuàng)建的對象

這里就明白了, 手動通過new創(chuàng)建和通過spring容器創(chuàng)建管理對象是不一樣的,手動new的對象,內(nèi)部用@autowire注解是無效的。

若讓該autowire生效,則需要通過容器來管理對象

改造如下,先給ExcelListener加上注解@Component

@Scope(“prototype”)
@Component(“excelListener”)
public class ExcelListener extends AnalysisEventListener<List> {
@Autowired
private CapitalDetailDOMapper capitalDetailDOMapper;
@Autowired
private ExcelRecordDOMapper excelRecordDOMapper;
…
}

這樣 這個bean就會被加載到spring容器中,這里Scope表示bean的作用范圍,spring默認創(chuàng)建的對象是單例的

prototype是非單例,這里我主要是想在不同的線程里面創(chuàng)建不同的ExcelListener實例。

可以通過容器獲取bean,也可以直接@autowire

ExcelListener excelListener= SpringBeanUtils.getBean(“excelListener”);

其中SpringBeanUtils為實現(xiàn)了BeanFactoryPostProcessor接口的實現(xiàn)類

能夠從spring容器里面獲取到bean的實例,如果bean是非單例的 每次則獲取到是一個新的bean

@Component
@Getter
public class SpringBeanUtils implements BeanFactoryPostProcessor {
private static ConfigurableListableBeanFactory beanFactory;
public static T getBean(String beanName) {
return (T) beanFactory.getBean(beanName);
}
public static T getBean(Class beanClz) {
return beanFactory.getBean(beanClz);
}
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
SpringBeanUtils.beanFactory = beanFactory;
}
}

注意??!如果A類是單例的,那么A類中的成員B類聲明為非單例的,也是無效的。

因為只有A類的一個實例,里面包含的B類的實例也只有一個。 除非能再次創(chuàng)建A類的實例,才能創(chuàng)建出另一個B類的實例對象。

bean交個spring和new比較區(qū)別

在spring的配置文件中我們要使用DataSource這個對吧

這個bean將會被多個bean引用   通過ref="dateSource"這個引用  當我們要修改這個只要修改引用就好了  不需要修改很多了  

主要是解耦

比如你有一個A類 在好幾個類里邊要調(diào)用到A的方法 new的話就要在每個類里都new A()

spring的話 只要配置一個bean進行注入就夠了。

哪天你不用A類了 改成B了~ 直接把bean里邊的class改成B就搞定了

如果用new的話 要改好幾個地方~

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java單元測試Powermockito和Mockito使用總結(jié)

    Java單元測試Powermockito和Mockito使用總結(jié)

    公司單元測試框架選用了Junit 4.12,Mock框架選用了Mockito和PowerMock,本文主要介紹了Java單元測試Powermockito和Mockito使用總結(jié),感興趣的可以了解一下
    2021-09-09
  • Java分布式鎖由淺入深介紹

    Java分布式鎖由淺入深介紹

    這篇文章主要介紹了Java分布式鎖,數(shù)據(jù)庫實現(xiàn)分布式鎖方式比較多,如悲觀鎖(查詢時增加for?update)、樂觀鎖(通過version字段)、增加一個表記錄鎖信息等。因為依賴于數(shù)據(jù)庫,比較好理解,但是也存在一些問題
    2023-03-03
  • Java實現(xiàn)電影院訂票系統(tǒng)代碼

    Java實現(xiàn)電影院訂票系統(tǒng)代碼

    這篇文章主要介紹了Java實現(xiàn)電影院訂票系統(tǒng)代碼,代碼實現(xiàn)了界面類登錄注冊類,用戶類等,具有一定參考價值,需要的朋友可以參考下。
    2017-11-11
  • Java中的關(guān)鍵字synchronized 詳解

    Java中的關(guān)鍵字synchronized 詳解

    這篇文章主要介紹了Java中的關(guān)鍵字synchronized,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • 淺談java中為什么實體類需要實現(xiàn)序列化

    淺談java中為什么實體類需要實現(xiàn)序列化

    下面小編就為大家?guī)硪黄獪\談java中為什么實體類需要實現(xiàn)序列化。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • springboot做代理分發(fā)服務+代理鑒權(quán)的實現(xiàn)過程

    springboot做代理分發(fā)服務+代理鑒權(quán)的實現(xiàn)過程

    這篇文章主要介紹了springboot做代理分發(fā)服務+代理鑒權(quán)的實現(xiàn)過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Java?@Validated遇到的大坑與處理

    Java?@Validated遇到的大坑與處理

    這篇文章主要介紹了Java?@Validated遇到的大坑與處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • SpringBoot底層注解超詳細介紹

    SpringBoot底層注解超詳細介紹

    這篇文章主要介紹了SpringBoot底層注解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-09-09
  • 如何讀取properties或yml文件數(shù)據(jù)并匹配

    如何讀取properties或yml文件數(shù)據(jù)并匹配

    這篇文章主要介紹了如何讀取properties或yml文件數(shù)據(jù)并匹配方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java集合List與Array的相互轉(zhuǎn)換

    Java集合List與Array的相互轉(zhuǎn)換

    本篇文章主要介紹了Java集合List與Array的相互轉(zhuǎn)換,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02

最新評論