国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring FrameWork從入門到NB -基于注解配置 & @Autowired注解

這篇具有很好參考價(jià)值的文章主要介紹了Spring FrameWork從入門到NB -基于注解配置 & @Autowired注解。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

基于注解的配置

其實(shí)前面我們已經(jīng)在基于注解配置了,這是由于個(gè)人比較喜歡基于注解配置。

Spring官方文檔提過(guò)一個(gè)問(wèn)題:基于注解配置要好于基于xml的配置嗎?其實(shí)各有千秋,根據(jù)個(gè)人喜好吧。重要的是Spring可以支持基于注解配置,也可以支持基于xml配置文件配置,也可以支持兩者的混搭。

我們可以使用Spring的基于BeanPostProcessor的@Autowire注解,Spring也支持JSR-250的@PostConstruct和@PreDestroy注解,以及基于 JSR-330 (Dependency Injection for Java) 的注解 @Inject 和 @Named。

基于注解的依賴注入的執(zhí)行要早于基于xml配置文件,所以如果同時(shí)使用的話,基于xml文件的配置要優(yōu)先于基于注解的:xml配置會(huì)覆蓋掉注解配置。

通過(guò)以下配置可以實(shí)現(xiàn)混合xml和注解的配置:

<?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/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd" >
    <context:annotation-config/>
    <context:component-scan base-package="packageName.packageName"/>
</beans>

基于注解的配置的底層生效原理其實(shí)是通過(guò)BeanPostProcessor,配置項(xiàng) context:annotation-config/在Spring容器中隱式的注冊(cè)了如下BeanPostProcessor:

ConfigurationClassPostProcessor
AutowiredAnnotationBeanPostProcessor
CommonAnnotationBeanPostProcessor
PersistenceAnnotationBeanPostProcessor
EventListenerMethodProcessor

比如@Autoware注解就是通過(guò)AutowiredAnnotationBeanPostProcessor(postProcessProperties方法)生效的。

@Autowired注解

@Autowired注解可以作用在構(gòu)造方法、屬性、以及普通方法上,我們?cè)谇懊娴奈恼轮幸呀?jīng)做過(guò)說(shuō)明。

作用在構(gòu)造方法和普通方法上,會(huì)自動(dòng)裝配方法中的參數(shù),作用在屬性上則自動(dòng)裝配該屬性。

@Autowired注解是通過(guò)類型匹配的,所以添加注解的參數(shù)類型和注冊(cè)到Spring IoC容器中的Bean的類型必須要匹配,如果Spring IoC在自動(dòng)裝配的過(guò)程中找不到匹配的Bean執(zhí)行注入的話,會(huì)發(fā)生注入失敗,拋異常。

Spring可以支持將同一類型的Bean注入到集合對(duì)象中,比如:

public class MovieRecommender {

	private Set<MovieCatalog> movieCatalogs;

	@Autowired
	public void setMovieCatalogs(Set<MovieCatalog> movieCatalogs) {
		this.movieCatalogs = movieCatalogs;
	}

	// ...
}

則Spring IoC容器中的所有類型為MovieCatalog的Bean都會(huì)注入到movieCatalogs中。MovieCatalog可以通過(guò)實(shí)現(xiàn) org.springframework.core.Ordered接口或者使用@Order注解、 @Priority注解實(shí)現(xiàn)排序。

也可以將同類型的對(duì)象注入到Map中:

public class MovieRecommender {

	private Map<String, MovieCatalog> movieCatalogs;

	@Autowired
	public void setMovieCatalogs(Map<String, MovieCatalog> movieCatalogs) {
		this.movieCatalogs = movieCatalogs;
	}

	// ...
}

此時(shí)Map的key值為bean name,value值為bean對(duì)象。

默認(rèn)情況下@Autowired注解期望必須能夠注入一個(gè)依賴對(duì)象到目標(biāo)對(duì)象中,否則,如果沒(méi)有匹配到、或者匹配到多個(gè)對(duì)象的話,注入失敗,拋異常。

通過(guò)@Autowired對(duì)集合類型注入也要求必須要有至少一個(gè)bean存在,不存在的話會(huì)拋異常。

可以通過(guò)@Autowired的屬性required來(lái)改變這一行為:默認(rèn)情況下required = true,我們可以修改required = false,則允許匹配不到依賴對(duì)象的情況存在,此時(shí)不注入任何對(duì)象,目標(biāo)對(duì)象的值為null。

當(dāng)@Autowired作用于構(gòu)造方法上的時(shí)候,required 設(shè)置為true的情況下,僅允許有一個(gè)構(gòu)造方法設(shè)置為@Autowired。當(dāng)多個(gè)構(gòu)造方法被設(shè)置為@Autowired(required必須設(shè)置為false)的時(shí)候,Sping IoC在注入的時(shí)候會(huì)選擇構(gòu)造方法參數(shù)依賴注入滿足程度最好的構(gòu)造器執(zhí)行注入。如果一個(gè)類有多個(gè)構(gòu)造器、并且都沒(méi)有設(shè)置@Autowired,則主構(gòu)造器、或者默認(rèn)的構(gòu)造器會(huì)被執(zhí)行;如果一個(gè)類只有一個(gè)構(gòu)造器,那么該構(gòu)造器就一定會(huì)被執(zhí)行,即使該構(gòu)造器并沒(méi)有標(biāo)注@Autowired。

java 8 的java.util.Optional、以及@Nullable(Spring5.0以后)同樣可以用來(lái)標(biāo)注@Autowired為非必須(等同于required=false):

public class SimpleMovieLister {

	@Autowired
	public void setMovieFinder(Optional<MovieFinder> movieFinder) {
		...
	}
}

最后:

The @Autowired, @Inject, @Value, and @Resource annotations are handled by Spring BeanPostProcessor implementations. This means that you cannot apply these annotations within your own BeanPostProcessor or BeanFactoryPostProcessor types (if any). These types must be ‘wired up’ explicitly by using XML or a Spring @Bean method.

由于@Autowired, @Inject, @Value, and @Resource是通過(guò)BeanPostProcessor實(shí)現(xiàn)的,所以如果你自己實(shí)現(xiàn)了一個(gè)BeanPostProcessor,那就不能用以上幾個(gè)注解,用以上幾個(gè)注解是無(wú)法實(shí)現(xiàn)BeanPostProcessor功能的(錯(cuò)過(guò)了BeanPostProcessor的時(shí)機(jī))。

上一篇 Spring FrameWork從入門到NB -Lazy-initialized Beans文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-495135.html

到了這里,關(guān)于Spring FrameWork從入門到NB -基于注解配置 & @Autowired注解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Spring02-Spring注解的使用、基于注解的IOC、純注解配置、整合Junit、AOP入門、基于配置文件的AOP、切入點(diǎn)表達(dá)式、基于配置的文件環(huán)繞通知

    學(xué)習(xí)基于注解的 IOC 配置,即注解配置 和 XML 配置要實(shí)現(xiàn)的功能都是一樣的,都是要降低程序間的耦合。只是配置的形式不一樣。 關(guān)于實(shí)際的開(kāi)發(fā)中到底使用xml還是注解,每家公司有著不同的使用習(xí)慣 , 所以這兩種配置方式我們都需要掌握。 把 Spring 的 xml 配置內(nèi)容改為使用

    2024年02月03日
    瀏覽(20)
  • Spring @Autowired 注解原理

    Spring @Autowired 注解原理

    被掃描的組件配置類 輸出結(jié)果 定位@Autowired所在包 org.springframework.beans.factory.annotation.Autowired 找到同包下 AutowiredAnnotationBeanPostProcessor AutowiredAnnotationBeanPostProcessor 的類繼承圖如下 AutowiredAnnotationBeanPostProcessor實(shí)現(xiàn)了InstantiationAwareBeanPostProcessor與 MergedBeanDefinitionPostProcessor兩個(gè)Bea

    2024年02月16日
    瀏覽(34)
  • Spring高手之路-@Autowired和@Resource注解異同點(diǎn)

    Spring高手之路-@Autowired和@Resource注解異同點(diǎn)

    目錄 概述 相同點(diǎn) 1.都可以實(shí)現(xiàn)依賴注入 2.都可以用于注入任意類型的Bean 3.都支持通過(guò)名稱、類型匹配進(jìn)行注入 不同點(diǎn) 1.來(lái)源不同。 2.包含的屬性不同 3.匹配方式(裝配順序)不同。 4.支持的注入對(duì)象類型不同 5.應(yīng)用地方不同 @Autowired 和 @Resource 是在 Java 開(kāi)發(fā)中用于實(shí)現(xiàn)依賴

    2024年02月03日
    瀏覽(26)
  • 【Spring實(shí)戰(zhàn)】28 @Autowired 和 @Resource注解的區(qū)別與使用

    Spring 框架是一個(gè)強(qiáng)大的 Java 企業(yè)應(yīng)用開(kāi)發(fā)框架, 提供了多種依賴注入的方式 。其中, @Autowired 和 @Resource 是兩個(gè)常用的注解,用于實(shí)現(xiàn)依賴注入。本文將介紹這兩個(gè)注解的區(qū)別以及在實(shí)際應(yīng)用中如何進(jìn)行選擇。 1)匹配方式 @Autowired 是由 Spring 框架提供的注解,用于實(shí)現(xiàn)自動(dòng)

    2024年01月21日
    瀏覽(45)
  • 為什么Spring和IDEA不推薦使用@Autowired注解,有哪些替代方案?

    為什么Spring和IDEA不推薦使用@Autowired注解,有哪些替代方案?

    在使用Spring框架和JetBrains IDEA集成開(kāi)發(fā)環(huán)境(IDE)進(jìn)行Java開(kāi)發(fā)時(shí),你可能經(jīng)常會(huì)遇到@Autowired注解。@Autowired是Spring框架中用于實(shí)現(xiàn)依賴注入的核心注解之一。然而,近年來(lái),Spring和IDEA都不再推薦使用@Autowired注解,并提出了更好的替代方案。本文將詳細(xì)分析為什么Spring和IDEA不

    2024年02月07日
    瀏覽(23)
  • Spring和IDEA都不推薦用的@Autowired注解,為什么還有那么多人用?

    Spring和IDEA都不推薦用的@Autowired注解,為什么還有那么多人用?

    @Autowired的默認(rèn)裝配 我們都知道在spring中@Autowired注解,是用來(lái)自動(dòng)裝配對(duì)象的。通常,我們?cè)陧?xiàng)目中是這樣用的: 沒(méi)錯(cuò),這樣是能夠裝配成功的,因?yàn)槟J(rèn)情況下spring是按照類型裝配的,也就是我們所說(shuō)的byType方式。 此外,@Autowired注解的required參數(shù)默認(rèn)是true,表示開(kāi)啟自動(dòng)

    2023年04月18日
    瀏覽(24)
  • @Autowired和@Resource注解之間的關(guān)系區(qū)別,Bean的作用域和生命周期,Spring的執(zhí)行流程

    @Autowired和@Resource注解之間的關(guān)系區(qū)別,Bean的作用域和生命周期,Spring的執(zhí)行流程

    目錄 一. @Autowired 和 @Resource 注解 二. Bean的作用域? 1.?singleton(單例模式) 2.?prototype(原型模式)(多例模式) 3. 請(qǐng)求作用域:request 4. 會(huì)話作用域:session 三. Spring 的執(zhí)行流程 四. Bean 的生命周期? ?1. 實(shí)例化 ?2. 設(shè)置屬性? 3. Bean 初始化?? ? ?3.1 執(zhí)行各種各種 Aware 通知;? ? ?

    2024年02月04日
    瀏覽(25)
  • 【注解使用】使用@Autowired后提示:Field injection is not recommended(Spring團(tuán)隊(duì)不推薦使用Field注入)

    【注解使用】使用@Autowired后提示:Field injection is not recommended(Spring團(tuán)隊(duì)不推薦使用Field注入)

    在使用 IDEA 開(kāi)發(fā) SpringBoot 項(xiàng)目時(shí),在? Controller ?類中使用注解? @Autowired ?注入一個(gè)依賴出現(xiàn)了警告提示,查看其他使用該注解的地方同樣出現(xiàn)了警告提示。這是怎么回事?由于先去使用了SpringBoot并沒(méi)有對(duì)Spring進(jìn)行系統(tǒng)性學(xué)習(xí),所以做一個(gè)記錄。 Field injection is not recommended(

    2024年02月12日
    瀏覽(19)
  • Spring——基于注解的AOP配置

    Spring——基于注解的AOP配置

    1.1.pom.xml 1.2.dao 1.3.service 1.4.applicationContext.xml 1.5.測(cè)試 2.1.applicationContext.xml 2.2.AOP配置 常用注解 @Aspect:把當(dāng)前類聲明為切面類 @Before:前置通知,可以指定切入點(diǎn)表達(dá)式 @AfterReturning:后置【try】通知,可以指定切入點(diǎn)表達(dá)式 @AfterThrowing:異?!綾atch】通知,可以指定切入點(diǎn)表達(dá)

    2024年01月22日
    瀏覽(20)
  • Spring MVC 三 :基于注解配置

    Servlet3.0 Servlet3.0是基于注解配置的理論基礎(chǔ)。 Servlet3.0引入了基于注解配置Servlet的規(guī)范,提出了可拔插的ServletContext初始化方式,引入了一個(gè)叫ServletContainerInitializer的接口。 An instance of the ServletContainerInitializer is looked up via the jar services API by the container at container / application sta

    2024年02月11日
    瀏覽(24)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包