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

你所不知道的Spring自動(dòng)注入詳解

 更新時(shí)間:2020年10月18日 11:49:54   作者:ZeS丶  
這篇文章主要給大家介紹了關(guān)于你所不知道的Spring自動(dòng)注入的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

自動(dòng)注入和@Autowire

@Autowire不屬于自動(dòng)注入!

注入方式(重要)

在Spring官網(wǎng)上(文檔),定義了在Spring中的注入方式一共有兩種:set方法和構(gòu)造函數(shù)。

也就是說,你想在A類里面注入另外一個(gè)B類,無論你是通過寫 XML文件,或者通過 @Autowried,他們最終都是通過這個(gè)A類的set方法或者構(gòu)造函數(shù),將B類注入到A類中!

換句話說,你如果A類里面沒有setB(B b){…},那你就別想通過set方法把B類注入到A類中

自動(dòng)注入

首先擺出一個(gè)比較顛覆的觀點(diǎn):@Autowire不屬于自動(dòng)注入!

如果要討論自動(dòng)注入,我們先要了解什么是自動(dòng)注入,什么是手動(dòng)注入。

  • 手動(dòng)注入:在Spring 1.x的時(shí)候,我們想要在A類中注入B類,我們只能通過在xml配置文件中,加上< property >標(biāo)簽。也就是說,如果我們想在A類中注入100個(gè)類,我們就要重復(fù)著寫100個(gè)< property > 。而Spring為了我們能少碼點(diǎn)字,就提供了 @Autowired 注解,通過這個(gè)注解,我們就可以更加輕松的手動(dòng)注入需要的類
  • 自動(dòng)注入:如果在A類里面,需要用到B類,C類等等…我不需要重復(fù)著寫100個(gè)< property >或者100個(gè)@Autowired。而是只需要注明需要哪些類即可

既然是自動(dòng),那就代表我啥都不用做,就連一個(gè) @Autowire 我都不加的情況下我讓B類注入進(jìn)A類,這才算真正的自動(dòng)注入

證明:

首先,我們先看看最原始的,通過xml的注入類:

<bean id="exampleBean" class="examples.ExampleBean">
 <!-- setter injection using the nested ref element -->
 <property name="beanOne">
  <ref bean="anotherExampleBean"/>
 </property>
</bean>

<bean id="anotherExampleBean" class="examples.AnotherBean"/>

對應(yīng)的類:

public class ExampleBean {
 private AnotherBean beanOne;

 public void setBeanOne(AnotherBean beanOne) {
  this.beanOne = beanOne;
 }
}

這是Spring官網(wǎng)上的一個(gè)例子,在最開始,我們通過在XML中追加<property>屬性來為類加上其所需要的類。這種手動(dòng)注入的方式十分的繁瑣,所以后面出現(xiàn)了@Autowire注解來進(jìn)行注入!說白了,就是人們?yōu)榱送祽?,用一個(gè)@Autowire注解代替了寫一大串的property屬性!(先這么理解,底層源碼肯定不是這么做的?。┻@樣的話,還能說 @Autowire 是自動(dòng)注入了嗎?

對于自動(dòng)注入,在Spring中提供了下面4種方式(甚至我可以更加負(fù)責(zé)任的告訴你們,在Spring源碼中有5種)

在這里插入圖片描述

先根據(jù)官方文檔提供的4種方法進(jìn)行解釋:

  • no:就是不要自動(dòng)裝配
  • byName:通過名字進(jìn)行自動(dòng)裝配
  • byType:通過類型進(jìn)行自動(dòng)裝配
  • constructor:通過構(gòu)造函數(shù)進(jìn)行自動(dòng)裝配

最開始我有寫到,在Spring中,自動(dòng)注入的方式就只有兩種,通過set()方法和構(gòu)造函數(shù)。所以 byName和 byType 都是通過 set()進(jìn)行裝配的。


代碼演示:通過byType方式進(jìn)行自動(dòng)注入

通過在<beans>標(biāo)簽的末尾加上 default-autowire="byType"來實(shí)現(xiàn)Spring的自動(dòng)注入

<?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:aop="http://www.springframework.org/schema/aop"
	  xsi:schemaLocation="http://www.springframework.org/schema/beans
    https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd"
		default-autowire="byType">

	<bean id="defaultAutowireService" class="com.spring.autowiringModes.DefaultAutowireService">
	</bean>

	<bean id="byTypeDemo" class="com.spring.autowiringModes.ByTypeDemo"/>

</beans>

Java類:

public class DefaultAutowireService {
	ByTypeDemo byTypeDemo;

	public ByTypeDemo getByTypeDemo() {
		return byTypeDemo;
	}

	public void setByTypeDemo(ByTypeDemo byTypeDemo) {
		this.byTypeDemo = byTypeDemo;
	}
}

啟動(dòng)類:

public class XmlTest {
	public static void main(String[] args) {

		ClassPathXmlApplicationContext context =
				new ClassPathXmlApplicationContext("spring.xml");

		DefaultAutowireService bean =
				context.getBean("defaultAutowireService", DefaultAutowireService.class);

		System.out.println(bean.getByTypeDemo());

	}
}

控制臺(tái):

在這里插入圖片描述

如果這時(shí)我們把xml文件中的default-autowire去掉,重新啟動(dòng)程序并查看控制臺(tái):

在這里插入圖片描述

紙上得來終覺淺,絕知此事要躬行!希望大家也可以自己寫寫代碼再驗(yàn)證一下!

總結(jié)

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

相關(guān)文章

  • JVM的基本介紹以及垃圾回收

    JVM的基本介紹以及垃圾回收

    垃圾回收(Garbage Collection,GC),顧名思義就是釋放垃圾占用的空間,防止內(nèi)存泄露,這篇文章主要給大家介紹了關(guān)于JVM垃圾回收的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • Spring?Security實(shí)現(xiàn)分布式系統(tǒng)授權(quán)方案詳解

    Spring?Security實(shí)現(xiàn)分布式系統(tǒng)授權(quán)方案詳解

    這篇文章主要介紹了Spring?Security實(shí)現(xiàn)分布式系統(tǒng)授權(quán),本節(jié)完成注冊中心的搭建,注冊中心采用Eureka,本文通過示例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • SpringBoot新手入門的快速教程

    SpringBoot新手入門的快速教程

    這篇文章主要給大家介紹了關(guān)于SpringBoot新手入門的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用SpringBoot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 詳解Java設(shè)計(jì)模式之單例模式

    詳解Java設(shè)計(jì)模式之單例模式

    單例模式是一種創(chuàng)建型設(shè)計(jì)模式,它的目的是確保一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局訪問點(diǎn)來訪問該實(shí)例,在單例模式中,類自身負(fù)責(zé)創(chuàng)建自己的唯一實(shí)例,并確保在系統(tǒng)中只有一個(gè)實(shí)例存在,本文詳細(xì)介紹了Java設(shè)計(jì)模式中的單例模式,感興趣的同學(xué)可以參考閱讀
    2023-05-05
  • java-流的使用完結(jié)與異常處理機(jī)制(詳解)

    java-流的使用完結(jié)與異常處理機(jī)制(詳解)

    下面小編就為大家?guī)硪黄猨ava-流的使用完結(jié)與異常處理機(jī)制(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • java對象持久化保存的方法詳解

    java對象持久化保存的方法詳解

    這篇文章主要介紹了java對象持久化保存的方法詳解,在java應(yīng)用開發(fā)的過程中,經(jīng)常遇到需要持久保存java對象的情況,比如:用戶信息、博客評論內(nèi)容等等,本文針對java對象的持久化保存方法進(jìn)行討論,簡述各個(gè)方法的優(yōu)劣,需要的朋友可以參考下
    2023-07-07
  • Java語言一元運(yùn)算符實(shí)例解析

    Java語言一元運(yùn)算符實(shí)例解析

    這篇文章主要介紹了Java語言中的一元運(yùn)算符實(shí)例解析,需要的朋友可以參考下。
    2017-09-09
  • Java中的RocketMQ消費(fèi)冪等詳解

    Java中的RocketMQ消費(fèi)冪等詳解

    這篇文章主要介紹了Java中的RocketMQ消費(fèi)冪等詳解,當(dāng)出現(xiàn)消費(fèi)者對某條消息重復(fù)消費(fèi)的情況時(shí),重復(fù)消費(fèi)的結(jié)果與消費(fèi)一次的結(jié)果是相同的,并且多次消費(fèi)并未對業(yè)務(wù)系統(tǒng)業(yè)務(wù)產(chǎn)生任何負(fù)面影響,那么這個(gè)消費(fèi)過程就是消息冪等,需要的朋友可以參考下
    2023-10-10
  • Java實(shí)現(xiàn)斗地主之洗牌發(fā)牌

    Java實(shí)現(xiàn)斗地主之洗牌發(fā)牌

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)斗地主之洗牌發(fā)牌,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Spring事務(wù)捕獲異常后依舊回滾的解決

    Spring事務(wù)捕獲異常后依舊回滾的解決

    本文主要介紹了Spring事務(wù)捕獲異常后依舊回滾的解決,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01

最新評論

荔波县| 三都| 遵义市| 金华市| 浦北县| 临颍县| 平顺县| 沅江市| 彭山县| 崇左市| 子长县| 溧阳市| 蛟河市| 斗六市| 东乌珠穆沁旗| 赤城县| 湘西| 怀化市| 江永县| 榆树市| 隆德县| 大理市| 南安市| 河津市| 沙田区| 绥化市| 巴里| 五寨县| 资源县| 老河口市| 张家口市| 长兴县| 开化县| 内乡县| 洛扎县| 彰化市| 永城市| 关岭| 岫岩| 洱源县| 镇赉县|