最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring的自動裝配常用注解詳解

 更新時間:2023年08月16日 09:43:38   作者:也曾眼眸有光  
這篇文章主要介紹了Spring的自動裝配常用注解詳解,自動裝配就是指 Spring 容器在不使用 <constructor-arg> 和<property> 標(biāo)簽的情況下,可以自動裝配相互協(xié)作的 Bean 之間的關(guān)聯(lián)關(guān)系,將一個 Bean 注入其他 Bean 的 Property 中,需要的朋友可以參考下

Spring的自動裝配

自動裝配就是指 Spring 容器在不使用 <constructor-arg> 和<property> 標(biāo)簽的情況下,可以自動裝配(autowire)相互協(xié)作的 Bean 之間的關(guān)聯(lián)關(guān)系,將一個 Bean 注入其他 Bean 的 Property 中。

使用自動裝配需要配置 <bean> 元素的 autowire 屬性。

autowire 屬性有五個值,具體說明如下表所示:

名稱說明
no默認值,表示不使用自動裝配,Bean 依賴必須通過 ref 元素定義。
byName根據(jù) Property 的 name 自動裝配,如果一個 Bean 的 name 和另一個 Bean 中的 Property 的 name 相同,則自動裝配這個 Bean 到 Property 中。(表示按屬性名稱自動裝配,XML 文件中 Bean 的 id 必須與類中的屬性名稱相同)
byType根據(jù) Property 的數(shù)據(jù)類型(Type)自動裝配,如果一個 Bean 的數(shù)據(jù)類型兼容另一個 Bean 中 Property 的數(shù)據(jù)類型,則自動裝配。(XML 文件中 Bean 的 id 與類中的屬性名稱可以不同,但必須只有一個類型的 Bean。)
constructor類似于 byType,根據(jù)構(gòu)造方法參數(shù)的數(shù)據(jù)類型,進行 byType 模式的自動裝配。(類中構(gòu)造函數(shù)的參數(shù)必須在配置文件中有相同的類型)
autodetect(3.0版本不支持)如果 Bean 中有默認的構(gòu)造方法,則用 constructor 模式,否則用 byType 模式。

自動裝配的優(yōu)缺點

優(yōu)點

  • 自動裝配只需要較少的代碼就可以實現(xiàn)依賴注入。

缺點

  • 不能自動裝配簡單數(shù)據(jù)類型,比如 int、boolean、String 等。
  • 相比較顯示裝配,自動裝配不受程序員控制。

Spring基于注解裝配Bean(常用注解)

Spring 默認不使用注解裝配 Bean,因此需要在配置文件中添加 <context:annotation-config/> ,啟用注解。

或者在被子文件中配置

 <context:component-scan base-package="需要使用注解的包"></context:component-scan>

常用注解注入值:

@Component:用來描述Spring中的Bean,僅僅表示一個組件(Bean),并且可以作用在任何層次,使用時只需要將該注解標(biāo)注在相應(yīng)類上即可。

@Controller:通常作用在控制層(如 Struts2 的 Action、SpringMVC 的 Controller),用于將控制層的類標(biāo)識為 Spring 中的 Bean,其功能與 @Component 相同。

@Service:通常作用在業(yè)務(wù)層(Service 層),用于將業(yè)務(wù)層的類標(biāo)識為 Spring 中的 Bean,其功能與 @Component 相同。

@Repository:用于將數(shù)據(jù)訪問層(DAO層)的類標(biāo)識為Spring中的Bean,其功能與@Component相同

@Autowired:可以應(yīng)用到 Bean 的屬性變量、屬性的 setter 方法、非 setter 方法及構(gòu)造函數(shù)等,配合對應(yīng)的注解處理器完成 Bean 的自動配置工作。默認按照 Bean 的類型進行裝配。只要容器中有唯一的一個bean對象類型和要注入的變量類型匹配,就可以注入成功,如果ioc容器中沒有任何bean類型和要注入的變量類型匹配則報錯

@Qualifier:與 @Autowired 注解配合使用,會將默認的按 Bean 類型裝配修改為按 Bean 的實例名稱裝配,Bean 的實例名稱由 @Qualifier 注解的參數(shù)指定。它在給類成員注入時不能單獨使用必須要和@Autowired,但是在給方法參數(shù)注入時可以單獨使用。

@Resource:作用于@Autowired相同,區(qū)別在于@Resource可以通過Bean實例名稱進行裝配,也就是@Resource中的兩個重要屬性name和type。

@Value:用于注入基本類型和String類型的值用于指定數(shù)據(jù)的值,它可以使用spring中SpEL;

@ConfigurationProperties:用于注入一些值。請注意以下幾點:

  • 前綴定義了哪些外部屬性將綁定到類的字段上
  • 根據(jù) Spring Boot 寬松的綁定規(guī)則,類的屬性名稱必須與外部屬性的名稱匹配
  • 我們可以簡單地用一個值初始化一個字段來定義一個默認值
  • 類本身可以是包私有的
  • 類的字段必須有公共 setter 方法

@Value和@ConfigurationProperties區(qū)別

區(qū)別@ConfigurationProperties@Value
功能批量注入配置文件中的屬性一個個指定
松散綁定(松散語法)支持不支持
SpEL不支持支持
JSR303數(shù)據(jù)校驗支持不支持
復(fù)雜類型封裝支持不支持

@Configuration:標(biāo)注在類上,配置spring容器(應(yīng)用上下文)。相當(dāng)于把該類作為spring的xml配置文件中的 <beans> ,在使用該注解的類中,使用@Bean注解標(biāo)注的方法,返回的類型都會直接注冊為bean。其底層實現(xiàn)使用了@Component 。

@Bean:用于告訴方法,產(chǎn)生一個Bean對象,然后這個Bean對象交給Spring管理。產(chǎn)生這個Bean對象的方法Spring只會調(diào)用一次,隨后這個Spring將會將這個Bean對象放在自己的IOC容器中。

改變作用域的常用注解:

@Lazy(true):表明一個bean 是否延遲加載,可以作用在方法上,表示這個方法被延遲加載;可以作用在@Component (或者由@Component 作為原注解) 注釋的類上,表明這個類中所有的bean 都被延遲加載。如果沒有@Lazy注釋,或者@Lazy 被設(shè)置為false,那么該bean 就會急切渴望被加載;除了上面兩種作用域,@Lazy 還可以作用在@Autowired和@Inject注釋的屬性上,在這種情況下,它將為該字段創(chuàng)建一個惰性代理,作為使用ObjectFactory或Provider的默認方法

@Scope:用來給Bean改變作用域,使用時直接在Bean上加@Scope(value = "xxx"),默認值為singleton。

和生命周期相關(guān)常用注解:

@PostConstruct:該注解被用來修飾一個非靜態(tài)的void()方法。被@PostConstruct修飾的方法會在服務(wù)器加載Servlet的時候運行,并且只會被服務(wù)器執(zhí)行一次。PostConstruct在構(gòu)造函數(shù)之后執(zhí)行,init()方法之前執(zhí)行。通常我們會是在Spring框架中使用到@PostConstruct注解 該注解的方法在整個Bean初始化中的執(zhí)行順序:Constructor(構(gòu)造方法) -> @Autowired(依賴注入) -> @PostConstruct(注釋的方法)

@PreDestory:@PreDestory修飾的方法會在服務(wù)器卸載Servlet的時候運行,并且之后被服務(wù)器調(diào)用一次,類似于Servlet中的destory()方法,雖然PreDestory字面意思是在destory之前運行,但是被@PreDestory修飾的方法會在destory方法運行之后運行,在Servlet被徹底卸載之前,PreDestory里的Destory指的是Servlet的銷毀,而不是destory()方法。

到此這篇關(guān)于Spring的自動裝配常用注解詳解的文章就介紹到這了,更多相關(guān)Spring自動裝配注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中StopWatch的使用示例詳解

    Java中StopWatch的使用示例詳解

    stopWatch 是org.springframework.util 包下的一個工具類,使用它可直觀的輸出代碼執(zhí)行耗時,以及執(zhí)行時間百分比,這篇文章主要介紹了Java中StopWatch的使用詳解,需要的朋友可以參考下
    2025-04-04
  • 深入理解JVM自動內(nèi)存管理

    深入理解JVM自動內(nèi)存管理

    對于Java虛擬機在內(nèi)存分配與回收的學(xué)習(xí),本文主要介紹了JVM自動內(nèi)存管理,文中通過圖文示例介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • SpringBoot前后端json數(shù)據(jù)交互的全過程記錄

    SpringBoot前后端json數(shù)據(jù)交互的全過程記錄

    現(xiàn)在大多數(shù)互聯(lián)網(wǎng)項目都是采用前后端分離的方式開發(fā),下面這篇文章主要給大家介紹了關(guān)于SpringBoot前后端json數(shù)據(jù)交互的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • 解決SpringBoot webSocket 資源無法加載、tomcat啟動報錯的問題

    解決SpringBoot webSocket 資源無法加載、tomcat啟動報錯的問題

    這篇文章主要介紹了解決SpringBoot webSocket 資源無法加載、tomcat啟動報錯的問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • spring boot基于Java的容器配置講解

    spring boot基于Java的容器配置講解

    這篇文章主要介紹了spring boot基于Java的容器配置講解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • SpringBoot項目開發(fā)中常用的依賴

    SpringBoot項目開發(fā)中常用的依賴

    這篇文章主要介紹了SpringBoot項目開發(fā)中常用的依賴詳解,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • Spring學(xué)習(xí)之依賴注入的方法(三種)

    Spring學(xué)習(xí)之依賴注入的方法(三種)

    本篇文章主要介紹了Spring學(xué)習(xí)之依賴注入的方法(三種),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • 淺談JVM系列之JIT中的Virtual Call

    淺談JVM系列之JIT中的Virtual Call

    什么是Virtual Call?Virtual Call在java中的實現(xiàn)是怎么樣的?Virtual Call在JIT中有沒有優(yōu)化?所有的答案看完這篇文章就明白了。
    2021-06-06
  • java使用compareTo實現(xiàn)一個類的對象之間比較大小操作

    java使用compareTo實現(xiàn)一個類的對象之間比較大小操作

    這篇文章主要介紹了java使用compareTo實現(xiàn)一個類的對象之間比較大小操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • spring boot mybatis枚舉映射示例代碼

    spring boot mybatis枚舉映射示例代碼

    這篇文章主要給大家介紹了關(guān)于spring boot mybatis枚舉映射的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評論

正阳县| 渑池县| 册亨县| 苏州市| 舟山市| 崇州市| 凌云县| 马尔康县| 唐山市| 金门县| 鄂托克前旗| 丰镇市| 芦溪县| 手机| 独山县| 民县| 克什克腾旗| 桦甸市| 苍南县| 绩溪县| 彰化市| 普格县| 绥化市| 武定县| 郓城县| 武定县| 无极县| 达拉特旗| 丰都县| 泸定县| 石屏县| 大港区| 兖州市| 黑龙江省| 孙吴县| 莱西市| 盐亭县| 天门市| 南平市| 铁岭市| 高邮市|