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

Spring注入Bean的一些方式總結(jié)

 更新時間:2019年04月07日 14:14:40   作者:Genius_Spark  
這篇文章主要給大家總結(jié)介紹了關(guān)于Spring注入Bean的一些方式,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Spring具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

通過注解注入Bean

背景

我們談到Spring的時候一定會提到IOC容器、DI依賴注入,Spring通過將一個個類標注為Bean的方法注入到IOC容器中,達到了控制反轉(zhuǎn)的效果。那么我們剛開始接觸Bean的時候,一定是使用xml文件,一個一個的注入,就例如下面這樣。

	<bean id="bean" class="beandemo.Bean" />

我們的項目一般很大的話,就需要成千上百個Bean去使用,這樣寫起來就很繁瑣。那么Spring就幫我們實現(xiàn)了一種通過注解來實現(xiàn)注入的方法。只需要在你需要注入的類前面加上相應(yīng)的注解,Spring就會幫助我們掃描到他們?nèi)崿F(xiàn)注入。

xml掃描包的方式

	<context:component-scan base-package="com.company.beandemo"/>

通過注解注入的一般形式

一般情況下,注入Bean有一個最直白,最易懂的方式去實現(xiàn)注入,下面廢話先不多說,先貼代碼。

Bean類

	public class MyBean{
	}

Configuration類

	//創(chuàng)建一個class配置文件
	@Configuration
	public class MyConfiguration{
		//將一個Bean交由Spring進行管理
 @Bean
 public MyBean myBean(){
  return new MyBean();
 }
	}

Test類

與xml有一點不同,這里在Test中,實例化的不再是ClassPathXmlApplicationContext,而是獲取的AnnotationConfigApplicationContext實例。

	ApplicationContext context = new AnnotationConfigApplicationContext(MyConfiguration.class);
	MyBean myBean = cotext.getBean("myBean",MyBean.class);
	System.out.println("myBean = " + myBean);

上面的代碼中MyBean也就是我們需要Spring去管理的一個Bean,他只是一個簡單的類。而MyConfiguration中,我們首先用@Configuration注解去標記了該類,這樣標明該類是一個Spring的一個配置類,在加載配置的時候會去加載他。

在MyConfiguration中我們可以看到有一個方法返回的是一個MyBean的實例,并且該方法上標注著@Bean的注解,標明這是一個注入Bean的方法,會將下面的返回的Bean注入IOC。

通過構(gòu)造方法注入Bean

我們在生成一個Bean實例的時候,可以使用Bean的構(gòu)造方法將Bean實現(xiàn)注入。直接看代碼

Bean類

	@Component
	public class MyBeanConstructor {

 	private AnotherBean anotherBeanConstructor;

 	@Autowired
 	public MyBeanConstructor(AnotherBean anotherBeanConstructor){
 	 this.anotherBeanConstructor = anotherBeanConstructor;
 	}

 	@Override
 	public String toString() {
 	return "MyBean{" +
  	"anotherBeanConstructor=" + anotherBeanConstructor +
  	'}';
 	}
	}

AnotherBean類

	@Component(value="Bean的id,默認為類名小駝峰")
	public class AnotherBean {
	}

Configuration類

	@Configuration
	@ComponentScan("com.company.annotationbean")
	public class MyConfiguration{
	}

這里我們可以發(fā)現(xiàn),和一般方式注入的代碼不一樣了,我們來看看新的注解都是什么意思:

@AutoWired

簡單粗暴,直接翻譯過來的意思就是自動裝配:wrench:,還不理解為什么叫自動裝配:wrench:?看了下一個注解的解釋你就知道了。若是在這里注入的時候指定一個Bean的id就要使用@Qualifier注解

@Component(默認單例模式)

什么??這翻譯過來是零件,怎么感覺像是修汽車??是的,Spring管理Bean的方法就是修汽車的方式。我們在需要將一個類變成一個Bean被Spring可以注入的時候加上注解零件@Conmonent,那么我們就可以在加載Bean的時候把他像零件一樣裝配:wrench:到這個IOC汽車上了
在這里我們還有幾個其他的注解也可以實現(xiàn)這個功能,也就是細化的@Component:

  • @Controller 標注在Controller層
    • @Service 標注在Service層
    • @Repository 標注在dao層
  • @ComponentScan("")

還是翻譯,零件掃描,我們?nèi)タ纯蠢ㄌ柪锏摹傲慵}庫”里面,哪些“零件”(類)需要被裝載,Spring就會去掃描這個包,將里面所有標注了@Component的類進行注入。

這里的通過構(gòu)造方法進行注入就很好理解了,我們在裝配MyBean這個零件的時候,突然發(fā)現(xiàn)他必須在AnotherBean的基礎(chǔ)上才能安裝到IOC里面,那么我們就在每次裝配MyBean的時候自動裝配:wrench:一個AnotherBean進去。舉個:chestnut:吧:

還是以汽車為例,我們在踩油門出發(fā)之前,是不是必須發(fā)車??這里的AutoWired的內(nèi)容就像發(fā)車,你不發(fā)車,這個油門你踩斷都沒有用,他都不會走。

通過set方法注入Bean

我們可以在一個屬性的set方法中去將Bean實現(xiàn)注入,看代碼吧

MyBean類

	@Component
	public class MyBeanSet {

 	private AnotherBean anotherBeanSet;

 	@Autowired
 	public void setAnotherBeanSet(AnotherBean anotherBeanSet) {
  	this.anotherBeanSet = anotherBeanSet;
 	}

 	@Override
 	public String toString() {
  	return "MyBeanSet{" +
   	"anotherBeanSet=" + anotherBeanSet +
   	'}';
 	}
	}

Configuration類 和 Test類

同上一個,就不貼了

這里我們發(fā)現(xiàn)在setter方法上我們有一個@AutoWired,與上面不同的是,我們不會在實例化該類時就自動裝配:wrench:這個對象,而是在顯式調(diào)用setter的時候去裝配。

通過屬性去注入Bean

我們前面兩種注入的方式諸如時間不同,并且代碼較多,若是通過屬性,即就是

	@Component
	public class MyBeanProperty {

 	@Autowired
 	private AnotherBean anotherBeanProperty;

 	@Override
 	public String toString() {
  	return "MyBeanProperty{" +
   	"anotherBeanProperty=" + anotherBeanProperty +
   	'}';
 	}
	}

這里我們可以看到我們這個類中需要使用AnotherBean這個實例對象,我們可以通過@AutoWired去自動裝配它。

對于有些小伙伴問私有屬性,Spring怎么去加載它到IOC的?推薦去看看反射

通過List注入Bean

MyBeanList類

	@Component
	public class MyBeanList {

 	private List<String> stringList;

 	@Autowired
 	public void setStringList(List<String> stringList) {
  	this.stringList = stringList;
 	}

 	public List<String> getStringList() {
  	return stringList;
 	}
	}

MyConfiguration類

	@Configuration
	@ComponentScan("annoBean.annotationbean")
	public class MyConfiguration {

	 @Bean
	 public List<String> stringList(){
	  List<String> stringList = new ArrayList<String>();
 	  stringList.add("List-1");
 	  stringList.add("List-2");
 	  return stringList;
	 }
	}

這里我們將MyBeanList進行了注入,對List中的元素會逐一注入。下面介紹另一種方式注入List

MyConfiguration類

	@Bean
 //通過該注解設(shè)定Bean注入的優(yōu)先級,不一定連續(xù)數(shù)字
 @Order(34)
 public String string1(){
  return "String-1";
 }

 @Bean
 @Order(14)
 public String string2(){
  return "String-2";
 }

注入與List中泛型一樣的類型,會自動去匹配類型,及時這里沒有任何List的感覺,只是String的類型,但他會去通過List的Bean的方式去注入。

第二種方式的優(yōu)先級高于第一種,當兩個都存在的時候,若要強制去使用第一種方式,則要去指定Bean的id即可

通過Map去注入Bean

	@Component
	public class MyBeanMap {

 	private Map<String,Integer> integerMap;

 	public Map<String, Integer> getIntegerMap() {
 	 return integerMap;
 	}

 	@Autowired
 	public void setIntegerMap(Map<String, Integer> integerMap) {
 	 this.integerMap = integerMap;
 	}
	}
	@Bean
 public Map<String,Integer> integerMap(){
  Map<String,Integer> integerMap = new HashMap<String, Integer>();
  integerMap.put("map-1",1);
  integerMap.put("map-2",2);
  return integerMap;
 }

 @Bean
 public Integer integer1(){
  return 1;
 }

 @Bean
 public Integer integer2(){
  return 2;
 }

同樣這里也具有兩種方式去注入Map類型Bean,且第二種的優(yōu)先值高于第一種

以上就是Bean通過注解注入的幾種方式,大家可以對比著xml注入的方式去看。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Spring三級緩存解決循環(huán)依賴的過程分析

    Spring三級緩存解決循環(huán)依賴的過程分析

    這篇文章主要介紹了Spring三級緩存解決循環(huán)依賴,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • Spark SQL 編程初級實踐詳解

    Spark SQL 編程初級實踐詳解

    這篇文章主要為大家介紹了Spark SQL 編程初級實踐詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • 并發(fā)編程之Java內(nèi)存模型

    并發(fā)編程之Java內(nèi)存模型

    這篇文章主要介紹了Java并發(fā)編程之內(nèi)存模型,Java內(nèi)存模型中的順序一致性,主要介紹重排序與順序一致性內(nèi)存模型,下面文章將圍繞Java內(nèi)存模型展開內(nèi)容,需要的小伙伴可以參考一下
    2021-11-11
  • SpringBoot整合Redis實現(xiàn)高并發(fā)數(shù)據(jù)緩存的示例講解

    SpringBoot整合Redis實現(xiàn)高并發(fā)數(shù)據(jù)緩存的示例講解

    這篇文章主要介紹了SpringBoot整合Redis實現(xiàn)高并發(fā)數(shù)據(jù)緩存,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • Cookie在Java中的使用

    Cookie在Java中的使用

    Cookie又稱“小甜餅”,類型為“小型文本文件”,指某些網(wǎng)站為了辨別用戶身份而儲存在用戶本地終端(Client Side)上的數(shù)據(jù)(通常經(jīng)過加密)。由用戶客戶端計算機暫時或永久保存的信息。本文將講解Cookie在Java中的使用,感興趣的朋友可以了解下
    2021-05-05
  • mybatis if標簽使用總結(jié)

    mybatis if標簽使用總結(jié)

    這篇文章主要介紹了mybatis if標簽使用總結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • Java基于Rest?Assured自動化測試接口詳解

    Java基于Rest?Assured自動化測試接口詳解

    Rest Assured 是一個基于 Java 的流行的用于測試 RESTful API 的庫。這篇文章主要介紹了Java如何基于Rest?Assured實現(xiàn)自動化測試接口,需要的可以參考一下
    2023-03-03
  • Java單元測試Mockito的使用詳解

    Java單元測試Mockito的使用詳解

    Mockito是一個強大的mock工具,本文將重點講述Mockito的基本使用及注意事項,以及Controller測試用例,本文通過示例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2021-07-07
  • Java中io流解析及代碼實例

    Java中io流解析及代碼實例

    這篇文章主要介紹了Java中io流解析及代碼實例,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • 一文講解如何解決Java中的IllegalArgumentException異常

    一文講解如何解決Java中的IllegalArgumentException異常

    這篇文章主要給大家介紹了關(guān)于如何解決Java中IllegalArgumentException異常的相關(guān)資料,IllegalArgumentException是Java中的一個標準異常類,通常在方法接收到一個不合法的參數(shù)時拋出,需要的朋友可以參考下
    2024-03-03

最新評論

诸城市| 永善县| 闻喜县| 崇信县| 汝城县| 沁源县| 明光市| 修武县| 峨眉山市| 兴化市| 夹江县| 毕节市| 台东市| 乌拉特中旗| 靖远县| 嘉义市| 永平县| 晋中市| 中卫市| 康马县| 祁阳县| 新巴尔虎右旗| 榆林市| 宝鸡市| 新昌县| 呼图壁县| 凌海市| 迁西县| 珠海市| 政和县| 息烽县| 阿拉善右旗| 开原市| 嘉黎县| 双辽市| 镇雄县| 大同市| 广安市| 石台县| 涪陵区| 积石山|