欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

注入方式(重要)

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

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

換句話說(shuō),你如果A類里面沒(méi)有setB(B b){…},那你就別想通過(guò)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類,我們只能通過(guò)在xml配置文件中,加上< property >標(biāo)簽。也就是說(shuō),如果我們想在A類中注入100個(gè)類,我們就要重復(fù)著寫100個(gè)< property > 。而Spring為了我們能少碼點(diǎn)字,就提供了 @Autowired 注解,通過(guò)這個(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)注入

證明:

首先,我們先看看最原始的,通過(guò)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"/>

對(duì)應(yīng)的類:

public class ExampleBean {
 private AnotherBean beanOne;

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

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

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

在這里插入圖片描述

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

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

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


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

通過(guò)在<beans>標(biāo)簽的末尾加上 default-autowire="byType"來(lái)實(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):

在這里插入圖片描述

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

總結(jié)

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

相關(guān)文章

  • IDEA使用Tomcat運(yùn)行web項(xiàng)目教程分享

    IDEA使用Tomcat運(yùn)行web項(xiàng)目教程分享

    在非Spring Boot項(xiàng)目中運(yùn)行Nacos示例,需要手動(dòng)配置Tomcat容器,本文介紹了如何在IDEA中配置Tomcat,并詳細(xì)解決了配置過(guò)程中可能遇到的異常情況,步驟包括修改IDEA項(xiàng)目結(jié)構(gòu)、添加Web模塊、配置Artifacts和Tomcat Server
    2024-10-10
  • SpringBoot和Vue2項(xiàng)目配置https協(xié)議過(guò)程

    SpringBoot和Vue2項(xiàng)目配置https協(xié)議過(guò)程

    本文詳細(xì)介紹了SpringBoot項(xiàng)目和Vue2項(xiàng)目的部署流程及SSL證書配置,對(duì)于SpringBoot項(xiàng)目,需將.pfx文件放入resources目錄并配置server,然后打包部署,Vue2項(xiàng)目中,涉及檢查nginx的SSL模塊、編譯新的nginx文件
    2024-10-10
  • 詳解java 中泛型中的類型擦除和橋方法

    詳解java 中泛型中的類型擦除和橋方法

    這篇文章主要介紹了詳解java 中泛型中的類型擦除和橋方法的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Java同步關(guān)鍵字synchronize底層實(shí)現(xiàn)原理解析

    Java同步關(guān)鍵字synchronize底層實(shí)現(xiàn)原理解析

    synchronized關(guān)鍵字對(duì)大家來(lái)說(shuō)并不陌生,當(dāng)我們遇到并發(fā)情況時(shí),優(yōu)先會(huì)想到用synchronized關(guān)鍵字去解決,synchronized確實(shí)能夠幫助我們?nèi)ソ鉀Q并發(fā)的問(wèn)題,接下來(lái)通過(guò)本文給大家分享java synchronize底層實(shí)現(xiàn)原理,感興趣的朋友一起看看吧
    2021-08-08
  • java 代理機(jī)制的實(shí)例詳解

    java 代理機(jī)制的實(shí)例詳解

    這篇文章主要介紹了java 代理機(jī)制的實(shí)例詳解的相關(guān)資料,這里說(shuō)明下如何實(shí)現(xiàn)代理機(jī)制,幫助大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-08-08
  • Spring事務(wù)注解@Transactional失效的八種場(chǎng)景分析

    Spring事務(wù)注解@Transactional失效的八種場(chǎng)景分析

    最近在開發(fā)采用Spring框架的項(xiàng)目中,使用了@Transactional注解,但發(fā)現(xiàn)事務(wù)注解失效了,所以這篇文章主要給大家介紹了關(guān)于Spring事務(wù)注解@Transactional失效的八種場(chǎng)景,需要的朋友可以參考下
    2021-05-05
  • 深入理解java中this關(guān)鍵字的使用

    深入理解java中this關(guān)鍵字的使用

    這篇文章主要介紹了this關(guān)鍵字的使用,通過(guò)調(diào)用構(gòu)造方法,使用this關(guān)鍵字調(diào)用當(dāng)前對(duì)象等詳細(xì)介紹了this的特點(diǎn)和使用,需要的朋友可以參考下
    2017-08-08
  • SpringCloud?Gateway詳細(xì)分析實(shí)現(xiàn)負(fù)載均衡與熔斷和限流

    SpringCloud?Gateway詳細(xì)分析實(shí)現(xiàn)負(fù)載均衡與熔斷和限流

    這篇文章主要介紹了SpringCloud?Gateway實(shí)現(xiàn)路由轉(zhuǎn)發(fā),負(fù)載均衡,熔斷和限流,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • Javaweb開發(fā)環(huán)境Myeclipse6.5 JDK1.6 Tomcat6.0 SVN1.8配置教程

    Javaweb開發(fā)環(huán)境Myeclipse6.5 JDK1.6 Tomcat6.0 SVN1.8配置教程

    這篇文章主要介紹了Javaweb開發(fā)環(huán)境Myeclipse6.5 JDK1.6 Tomcat6.0 SVN1.8配置教程,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Spring Cloud Alibaba 本地調(diào)試介紹及方案設(shè)計(jì)

    Spring Cloud Alibaba 本地調(diào)試介紹及方案設(shè)計(jì)

    為了解決 本地調(diào)試 的問(wèn)題,本文實(shí)現(xiàn)了一種簡(jiǎn)單實(shí)用的策略,可以通過(guò) Nacos 動(dòng)態(tài)配置服務(wù)路由,還可以基于用戶,部門,組織等級(jí)別配置服務(wù)路由,實(shí)現(xiàn) 本地調(diào)試 的同時(shí),實(shí)際上也實(shí)現(xiàn) 灰度發(fā)布,感興趣的朋友跟隨小編一起看看吧
    2021-07-07

最新評(píng)論