日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

(Spring)自动装配bean

發布時間:2025/3/20 javascript 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (Spring)自动装配bean 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 自動裝配bean
    • 1. 環境搭建
    • 2. byName自動裝配
    • 3. byType自動裝配
    • 4. 使用注解自動裝配
      • 4.1 @Autowired和@Qualifier
      • 4.2 @Resource
      • 4.3 總結

自動裝配bean

自動裝配說明

  • 自動裝配是使用spring滿足bean依賴的一種方法

  • spring會在應用上下文中為某個bean尋找其依賴的bean。

Spring的自動裝配需要從兩個角度來實現,或者說是兩個操作:

  • 組件掃描(component scanning):spring會自動發現應用上下文中所創建的bean;

  • 自動裝配(autowiring):spring自動滿足bean之間的依賴,也就是我們說的IoC/DI;

組件掃描和自動裝配組合發揮巨大威力,使得顯示的配置降低到最少。

1. 環境搭建

public class Cat {public void shout(){System.out.println("喵(>^ω^<)~");} } public class Dog {public void shout(){System.out.println("汪!");} } public class People {private Cat cat;private Dog dog;private String name;public Cat getCat() {return cat;}public void setCat(Cat cat) {this.cat = cat;}public Dog getDog() {return dog;}public void setDog(Dog dog) {this.dog = dog;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "People{" +"cat=" + cat +", dog=" + dog +", name='" + name + '\'' +'}';} }

測試
bean

<bean id="dog" class="com.zh.pojo.Dog"/><bean id="cat" class="com.zh.pojo.Cat"/><bean id="people" class="com.zh.pojo.People"><property name="name" value="伊澤瑞爾"/><property name="cat" ref="cat"/><property name="dog" ref="dog"/></bean> public class MyTest {@Testpublic void test1(){ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");People people = context.getBean("people", People.class);people.getCat().shout();people.getDog().shout();} }

2. byName自動裝配

由于在手動配置xml過程中,常常發生字母缺漏和大小寫等錯誤,而無法對其進行檢查,使得開發效率降低。

采用自動裝配將避免這些錯誤,并且使配置簡單化。

修改bean配置,增加一個屬性 autowire=“byName”

<bean id="people" class="com.zh.pojo.People" autowire="byName"><property name="name" value="伊澤瑞爾"/></bean>

測試依然成功
將 cat 的bean id修改為 catXXX 則出現空指針異常

注意!
使用byName實現自動裝配,對象名必須與beanid相同。

3. byType自動裝配

<bean id="dog" class="com.zh.pojo.Dog"/><bean id="cat" class="com.zh.pojo.Cat"/><bean id="people" class="com.zh.pojo.People" autowire="byType"><property name="name" value="伊澤瑞爾"/></bean>

注意!
使用autowire byType首先需要保證:同一類型的對象,在spring容器中唯一。如果不唯一,會報不唯一的異常。

4. 使用注解自動裝配

準備工作
在spring配置文件中引入context文件頭,以及開啟注解支持

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!--開啟注解支持--><context:annotation-config/><bean id="dog" class="com.zh.pojo.Dog"/><bean id="cat" class="com.zh.pojo.Cat"/><bean id="cat2" class="com.zh.pojo.Cat"/><bean id="people" class="com.zh.pojo.People" autowire="byType"/></beans>

4.1 @Autowired和@Qualifier

@Autowired

  • @Autowired是按類型自動轉配的,不支持id匹配。

  • 需要導入 spring-aop的包!

@Qualifier

  • @Autowired是根據類型自動裝配的,加上@Qualifier則可以根據byName的方式自動裝配

  • @Qualifier不能單獨使用。

這兩個注解可以配合使用,但一般開發情況下只需要@Autowired注解即可

測試:

public class People {@Autowired@Qualifier(value = "cat2")private Cat cat;@Autowiredprivate Dog dog;private String name;public Cat getCat() {return cat;}public Dog getDog() {return dog;}public String getName() {return name;}@Overridepublic String toString() {return "People{" +"cat=" + cat +", dog=" + dog +", name='" + name + '\'' +'}';} }

使用@Autowired注解時,由于是運用反射機制,所以可以不用寫set方法。
輸出

4.2 @Resource

  • @Resource如有指定的name屬性,先按該屬性進行byName方式查找裝配;

  • 其次再進行默認的byName方式進行裝配;

  • 如果以上都不成功,則按byType的方式自動裝配。

  • 都不成功,則報異常。

實體類

public class User {//如果允許對象為null,設置required = false,默認為true@Resource(name = "cat2")private Cat cat;@Resourceprivate Dog dog;private String str; }

beans.xml

<bean id="dog" class="com.kuang.pojo.Dog"/> <bean id="cat1" class="com.kuang.pojo.Cat"/> <bean id="cat2" class="com.kuang.pojo.Cat"/>

4.3 總結

@Autowired與@Resource異同:

1、@Autowired與@Resource都可以用來裝配bean。都可以寫在字段上,或寫在setter方法上。

2、@Autowired默認按類型裝配(屬于spring規范),默認情況下必須要求依賴對象必須存在,如果要允許null 值,可以設置它的required屬性為false,如:@Autowired(required=false) ,如果我們想使用名稱裝配可以結合@Qualifier注解進行使用

3、@Resource(屬于J2EE復返),默認按照名稱進行裝配,名稱可以通過name屬性進行指定。如果沒有指定name屬性,當注解寫在字段上時,默認取字段名進行按照名稱查找,如果注解寫在setter方法上默認取屬性名進行裝配。當找不到與名稱匹配的bean時才按照類型進行裝配。但是需要注意的是,如果name屬性一旦指定,就只會按照名稱進行裝配。

它們的作用相同都是用注解方式注入對象,但執行順序不同。@Autowired先byType,@Resource先byName。

總結

以上是生活随笔為你收集整理的(Spring)自动装配bean的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。