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

Spring中如何動(dòng)態(tài)注入Bean實(shí)例教程

 更新時(shí)間:2017年12月11日 16:25:42   作者:bladestone  
這篇文章主要給大家介紹了關(guān)于Spring中如何動(dòng)態(tài)注入Bean的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。

前言

在Spring中提供了非常多的方式注入實(shí)例,但是由于在初始化順序的不同,基于標(biāo)注的注入方式,容易出現(xiàn)未被正確注入成功的情況。

本文將介紹一種在實(shí)際項(xiàng)目中基于動(dòng)態(tài)的方式來提取Spring管理的Bean。 下面話不多說了,來一起看看詳細(xì)的介紹吧。

一、基于標(biāo)注的方式注入實(shí)例

需要在Bean初始化之時(shí),其依賴的對象必須初始化完畢。如果被注入的對象初始化晚于當(dāng)前對象,則注入的對象將為null.

1.1 @Autowired

按照類型來加載Spring管理的Bean。默認(rèn)情況下要求其Bean必須存在。 如果其Bean為null,則可以設(shè)置其required屬性為false。具體的詳情,可以參照源代碼:

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documentedpublic
@interface Autowired {
/** * Declares whether the annotated dependency is required. *
Defaults to {@code true}.
*/
boolean required() default true;
}

如果需要基于命令來注入Bean,則需要使用@Qualifier來標(biāo)注名稱,代碼示例如下:

@Autwired
@Qualifier("beanName")
private BeanType beanObj;

應(yīng)用范圍: 變量, setter方法和構(gòu)造函數(shù)之上。

來源: Spring框架

1.2 @Inject

由javax.inject.Inject提供,基于類型進(jìn)行自動(dòng)裝配,如果需要按照名稱進(jìn)行轉(zhuǎn)配,則需要配合使用@Named。這個(gè)使用方式和Spring框架提供的@Autowired非常類似。

應(yīng)用范圍: 變量、setter方法,構(gòu)造函數(shù)

來源: JSR330規(guī)范 javax擴(kuò)展包

代碼示例:

@Inject
@Named("beanName")
private BeanType bean;

1.3 @Resource

默認(rèn)是按照名稱來裝配注入的,只有當(dāng)找不到與名稱匹配的bean才會按照類型來裝配注入。其有JDK 1.6之后提供的。

應(yīng)用范圍:可以應(yīng)用到變量和setter方法之上

來源: JDK 1.6之后提供

代碼使用示例:

@Resource(name="mybeanName")
private BeanType bean;

二、動(dòng)態(tài)注入的方式

思路: 基于ApplicationContextAware來獲取ApplicationContext的引用,然后基于ApplicationContext進(jìn)行對象的動(dòng)態(tài)獲取。

實(shí)現(xiàn)代碼如下:

@Component

public class SpringContextUtil implements ApplicationContextAware {
// Spring應(yīng)用上下文環(huán)境
private static ApplicationContext applicationContext;
/*
* 實(shí)現(xiàn)ApplicationContextAware接口的回調(diào)方法,設(shè)置上下文環(huán)境
*
* @param applicationContext
*/
public void setApplicationContext(ApplicationContext applicationContext) {
SpringContextUtil.applicationContext = applicationContext;
}
/**
* @return ApplicationContext
*/
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
/**
* 獲取對象
*
* @param name
* @return Object
* @throws BeansException
*/
public static Object getBean(String name) throws BeansException {
return applicationContext.getBean(name);
}
}

之后就可以直接在代碼中動(dòng)態(tài)獲取所需要的Bean實(shí)例了:

BeanType bean = SpringContextUtil.getBean("beanName")

是不是非常容易使用呢?

總結(jié)

這里總結(jié)了在Spring中注入Bean的各種方式,各有優(yōu)劣,大家可以選擇使用。

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • java<<、>>、>>>移位操作方法

    java<<、>>、>>>移位操作方法

    下面小編就為大家?guī)硪黄猨ava<<、>>、>>>移位操作方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • java實(shí)現(xiàn)人民幣大小寫轉(zhuǎn)換方法分享

    java實(shí)現(xiàn)人民幣大小寫轉(zhuǎn)換方法分享

    本文介紹java人民幣數(shù)字大小寫轉(zhuǎn)換方法,代碼中有注釋,大家直接看代碼吧
    2014-01-01
  • Jmeter3.0發(fā)布!版本更新到底更新了什么

    Jmeter3.0發(fā)布!版本更新到底更新了什么

    Jmeter3.0發(fā)布!版本更新到底更新了什么?這篇文章主要告訴大家Jmeter3.0版本更新了什么,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Spring Security靈活的PasswordEncoder加密方式解析

    Spring Security靈活的PasswordEncoder加密方式解析

    這篇文章主要介紹了Spring Security靈活的PasswordEncoder加密方式解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • spring的幾個(gè)重要類和接口(詳解)

    spring的幾個(gè)重要類和接口(詳解)

    下面小編就為大家?guī)硪黄猻pring的幾個(gè)重要類和接口(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • java動(dòng)態(tài)構(gòu)建數(shù)據(jù)庫復(fù)雜查詢教程

    java動(dòng)態(tài)構(gòu)建數(shù)據(jù)庫復(fù)雜查詢教程

    這篇文章主要介紹了java動(dòng)態(tài)構(gòu)建數(shù)據(jù)庫復(fù)雜查詢的實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2021-11-11
  • mybatis如何封裝List<String>類型屬性

    mybatis如何封裝List<String>類型屬性

    這篇文章主要介紹了mybatis如何封裝List<String>類型屬性問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java JDBC批量執(zhí)行executeBatch方法詳解

    Java JDBC批量執(zhí)行executeBatch方法詳解

    這篇文章主要介紹了Java JDBC批量執(zhí)行executeBatch方法詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 使用Nacos下載、配置、整合項(xiàng)目方式

    使用Nacos下載、配置、整合項(xiàng)目方式

    這篇文章主要介紹了使用Nacos 下載、配置、整合項(xiàng)目方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 在SpringBoot項(xiàng)目中解決依賴沖突問題的方法

    在SpringBoot項(xiàng)目中解決依賴沖突問題的方法

    在SpringBoot項(xiàng)目中,依賴沖突是一個(gè)常見的問題,特別是當(dāng)項(xiàng)目引入多個(gè)第三方庫或框架時(shí),依賴沖突可能導(dǎo)致編譯錯(cuò)誤、運(yùn)行時(shí)異常或不可預(yù)測的行為,本文給大家介紹了如何在SpringBoot項(xiàng)目中解決以來沖突問題的方法,需要的朋友可以參考下
    2024-01-01

最新評論

平阳县| 分宜县| 都匀市| 老河口市| 鄂托克旗| 东台市| 穆棱市| 高青县| 曲松县| 永靖县| 九寨沟县| 镇坪县| 方正县| 泊头市| 九台市| 庄浪县| 华容县| 徐水县| 四会市| 苏尼特左旗| 宜兰市| 商水县| 陈巴尔虎旗| 吉水县| 府谷县| 嘉定区| 黄龙县| 长岭县| 郯城县| 旺苍县| 临泽县| 乌拉特后旗| 榆中县| 凉山| 佳木斯市| 崇左市| 临沧市| 铁岭市| 民权县| 鹿邑县| 衢州市|