国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java多例Bean的應(yīng)用場景-easyExcel導(dǎo)入

這篇具有很好參考價值的文章主要介紹了Java多例Bean的應(yīng)用場景-easyExcel導(dǎo)入。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。


Java多例Bean的應(yīng)用場景-easyExcel導(dǎo)入

1. bean注入方式(IOC)

Java多例Bean的應(yīng)用場景-easyExcel導(dǎo)入

2. 有狀態(tài)會話bean和無狀態(tài)會話bean

有狀態(tài)會話bean:每個用戶有自己特有的一個實(shí)例,在用戶的生存期內(nèi),bean保持了用戶的信息,即“有狀態(tài)”;一旦用戶滅亡(調(diào)用結(jié)束或?qū)嵗Y(jié)束),bean的生命期也告結(jié)束。即每個用戶最初都會得到一個初始的bean。

無狀態(tài)會話bean:bean一旦實(shí)例化就被加進(jìn)會話池中,各個用戶都可以共用。即使用戶已經(jīng)消亡,bean 的生命期也不一定結(jié)束,它可能依然存在于會話池中,供其他用戶調(diào)用。由于沒有特定的用戶,那么也就不能保持某一用戶的狀態(tài),所以叫無狀態(tài)bean。但無狀態(tài)會話bean 并非沒有狀態(tài),如果它有自己的屬性(變量),那么這些變量就會受到所有調(diào)用它的用戶的影響,這是在實(shí)際應(yīng)用中必須注意的。
面試題:單例 Bean 存在線程安全問題嗎?
答:在 Bean 中盡量避免定義可變的成員變量。推薦的做法時在類中定義一個 ThreadLocal 成員變量,將需要的可變成員變量保存在 ThreadLocal 中。
不過,大部分 Bean 實(shí)際都是無狀態(tài)(沒有實(shí)例變量)的(比如 Dao、Service),這種情況下, Bean 是線程安全的。

3. 單例模式和多例模式

@Scope注解主要作用是調(diào)節(jié)Ioc容器中的作用域,在Spring IoC容器中主要有以下幾種作用域:
基本作用域:singleton(單例)、prototype(多例);
Web 作用域(reqeust、session、globalsession);
自定義作用域。
目前有90%以上的業(yè)務(wù)系統(tǒng)都使用singleton單實(shí)例,因此spring也默認(rèn)的類型也是singleton,singleton保證了全局是一個實(shí)例,對性能有所提高,但是如果實(shí)例中有非靜態(tài)變量時,可能會導(dǎo)致線程安全、共享資源的競爭等問題。
當(dāng)設(shè)置為prototype(多實(shí)例)時:每次連接請求,都會重新生成一個新的bean實(shí)例,這也會導(dǎo)致一個問題,當(dāng)請求數(shù)越多,性能會降低,因?yàn)轭l繁創(chuàng)建的新的實(shí)例,會導(dǎo)致GC頻繁,GC回收時長增加。要根據(jù)實(shí)際情況選擇哪一種方式。

4. 深挖多例模式應(yīng)用場景?

在Spring中,prototype原型模式(多例模式)使用的場景不多,只有當(dāng)你的bean的屬性中會有數(shù)據(jù)存在的時候,才需要使用原型模式,否則數(shù)據(jù)就串了。我自己使用過的一個場景是用EasyExcel實(shí)現(xiàn)導(dǎo)入功能的時候會使用到。
在使用EasyExcel讀取表格文件時,官方文檔推薦的是自己進(jìn)行new一個Listener對象,但是想在這個對象中使用其他service對象的話,就不能使用@Autowired了,因?yàn)檫@個Listener對象并不受容器管理。其中Listener對象中用到的其他service或者DAO類通過構(gòu)造方法初始化進(jìn)去,如果直接用@Autowired注入會報空指針錯誤,項(xiàng)目中代碼如下:
Controller代碼:
Java多例Bean的應(yīng)用場景-easyExcel導(dǎo)入
Listener代碼:
Java多例Bean的應(yīng)用場景-easyExcel導(dǎo)入

我們可以考慮將這個Listener對象變成多例模式,加上@Component和@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)兩個注解:
Java多例Bean的應(yīng)用場景-easyExcel導(dǎo)入
然后在Controller里面通過Spring容器獲取這個對象(注意:一定要通過容器手動獲取,prototype原型模式的bean如果還通過@Autowired的形式注入的話,這個對象還是同一個,因?yàn)锧Autowired只會注入一次)

調(diào)用方通過Spring注入的方式自動注入EmployeeHouseImportListener,而非new的方式,這樣獲取到的EmployeeHouseImportListener是被Spring容器管理的,進(jìn)而可以在EmployeeHouseImportListener中通過@Autowired的方式成功獲取到同樣被Spring容器管理的UserService,因?yàn)閁serService 的實(shí)現(xiàn)類中有"@Service"注解標(biāo)記。文章來源地址http://www.zghlxwxcb.cn/news/detail-411610.html

//調(diào)用方
EmployeeHouseImportListener importListener = SpringUtils.getBean("employeeHouseImportListener");

到了這里,關(guān)于Java多例Bean的應(yīng)用場景-easyExcel導(dǎo)入的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Spring——Bean注入幾種方式(放入容器)

    Spring——Bean注入幾種方式(放入容器)

    個人博客: 全是干貨,相信不會讓你失望 1.XML方式注入 在現(xiàn)在這個Springboot橫行的年代,以XML來注入的方式可能已經(jīng)不多見了,因?yàn)閴焊貌恢吘故亲⑷敕绞街灰驳锰嵋惶?,這種方式就是依賴于XML的解析來獲取我們需要注入的Bean對象 常見的方式有:set方法注入、構(gòu)

    2024年02月01日
    瀏覽(28)
  • 將Bean注入Spring容器的五種方式

    將Bean注入Spring容器的五種方式

    將bean放入Spring容器中有哪些方式? 我們知道平時在開發(fā)中使用Spring的時候,都是將對象交由Spring去管理,那么將一個對象加入到Spring容器中,有哪些方式呢,下面我就來總結(jié)一下 這種方式其實(shí)也是我們最常用的一種方式,@Configuration用來聲明一個配置類,然后使用 @Bean 注解

    2024年02月05日
    瀏覽(21)
  • 一文道破將bean注入到Spring中的幾種方式

    一文道破將bean注入到Spring中的幾種方式

    前言: 前兩天有學(xué)妹問我如何將bean注入到Spring中,雖問題較簡單,但還是寫此文以告之。 在Java的Spring框架中,將bean注入到容器中是核心概念之一,這是實(shí)現(xiàn)依賴注入的基礎(chǔ)。Spring提供了多種方式來將bean注入到容器中。 寫此文,同時也希望這篇文章能幫助到各位路過的大佬

    2024年04月15日
    瀏覽(32)
  • Spring中Bean的生命周期以及Bean的單例與多例模式

    Spring中Bean的生命周期以及Bean的單例與多例模式

    bean的生命周期可以表達(dá)為:bean的定義?bean的初始化?bean的使用?bean的銷毀 1)通過XML、Java annotation(注解)以及Java Configuration(配置類) 等方式加載Bean 2)BeanDefinitionReader:解析Bean的定義。在Spring容器啟動過程中, 會將Bean解析成Spring內(nèi)部的BeanDefinition結(jié)構(gòu); 理解為:將

    2024年02月12日
    瀏覽(16)
  • spring(1):基于XML獲取Bean對象以及各種依賴注入方式

    1.1 根據(jù)id獲取 1.2 根據(jù)類型獲取 1.3 根據(jù)id和類型獲取 注意: 當(dāng)根據(jù)類型獲取bean時,要求IOC容器中指定類型的bean有且只能有一個。 例如以下XML文件,當(dāng)IOC容器中一共配置了兩個,根據(jù)類型獲取時會拋出異常。 根據(jù)類型來獲取bean時,在滿足bean唯一性的前提下,其實(shí)只是看:

    2024年01月25日
    瀏覽(56)
  • 4.3---Spring框架之Spring中bean的注入方式---(深入版本)

    Spring基于xml注入bean的幾種方式: set()方法注入; 2.構(gòu)造器注入:①通過index設(shè)置參數(shù)的位置;②通過type設(shè)置參數(shù)類型; 靜態(tài)工廠注入; 實(shí)例工廠; Spring IOC注入方式用得最多的是(1)(2)種; 注意:通過Spring創(chuàng)建的對象默認(rèn)是單例的,如果需要創(chuàng)建多實(shí)例對象可以在標(biāo)簽后面添

    2023年04月10日
    瀏覽(20)
  • JAVA實(shí)現(xiàn)easyExcel批量導(dǎo)入

    JAVA實(shí)現(xiàn)easyExcel批量導(dǎo)入

    注解 類型 描述 ExcelProperty 導(dǎo)入 指定當(dāng)前字段對應(yīng)excel中的那一列??梢愿鶕?jù)名字或者Index去匹配。當(dāng)然也可以不寫,默認(rèn)第一個字段就是index=0,以此類推。千萬注意,要么全部不寫,要么全部用index,要么全部用名字去匹配。千萬別三個混著用,除非你非常了解源代碼中三個

    2024年04月27日
    瀏覽(20)
  • Spring的生命周期及Spring Bean單例和多例---超詳細(xì)教學(xué)

    Spring的生命周期及Spring Bean單例和多例---超詳細(xì)教學(xué)

    ? ? 一個Bean對象從被Spring 容器創(chuàng)建到被銷毀的整個過程 。Spring框架對Bean對象的生命周期進(jìn)行了管理,提供了靈活性和控制權(quán),讓開發(fā)人員能夠在不同的階段進(jìn)行自定義操作 1.2.1 定位和解決問題 ? ? ?對象的生命周期可以幫助我們 準(zhǔn)確定位和解決程序中的問題 。當(dāng)程序出現(xiàn)

    2024年02月11日
    瀏覽(16)
  • Java 使用 EasyExcel 實(shí)現(xiàn)導(dǎo)入導(dǎo)出(新手篇教程)

    Java 使用 EasyExcel 實(shí)現(xiàn)導(dǎo)入導(dǎo)出(新手篇教程)

    官網(wǎng)鎮(zhèn)樓↓,覺得我寫的不好的同學(xué)可以去官網(wǎng)看哦 EasyExcel 示例: 如上一個簡易 Excel 表格,表頭占了兩行,且第三列開始才為有效數(shù)據(jù),那么我們應(yīng)該如何導(dǎo)入? 建造實(shí)體類 首先無論是導(dǎo)入還是導(dǎo)出,都需要先建對應(yīng)的實(shí)體類 ?如圖所示,因?yàn)槲业氖纠?Excel 一共需要讀

    2024年04月17日
    瀏覽(29)
  • 探究Spring Bean的六種作用域:了解適用場景和使用方式

    探究Spring Bean的六種作用域:了解適用場景和使用方式

    主要對單例作用域與原型作用域進(jìn)行重點(diǎn)說明,其余四個了解即可 單例作用域一般是默認(rèn)的Bean作用域。Spring容器在第一次獲取Bean時創(chuàng)建實(shí)例,并在后續(xù)請求中返回同一個實(shí)例。 例如: 我們現(xiàn)在創(chuàng)建一個公共的Bean供用戶一與用戶二使用,用戶一再使用完后對其內(nèi)容進(jìn)行修改

    2024年02月15日
    瀏覽(36)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包