亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

JavaConfig方式以及處理自動(dòng)裝配歧義性-spring基礎(chǔ)學(xué)習(xí)

2shou / 1421人閱讀

摘要:介紹在配置和直接注解式配置之外還有一種有趣的選擇方式,是指基于配置的。傳統(tǒng)的一般都是基本配置的,后來新增了許多的注解,特別是,基本都是清一色的。代碼如下創(chuàng)建對(duì)象創(chuàng)建對(duì)象創(chuàng)建一個(gè)對(duì)象運(yùn)行后的兩種結(jié)果

1.javaconfig介紹

在XML配置和直接注解式配置之外還有一種有趣的選擇方式-JavaConfig,java config是指基于java配置的spring。傳統(tǒng)的Spring一般都是基本xml配置的,后來spring3.0新增了許多java config的注解,特別是spring boot,基本都是清一色的java config。下面用一段簡單的程序來演示.
完整代碼已上傳github:https://github.com/SunPiHai/s...

2. 使用IDEA創(chuàng)建一個(gè)Maven項(xiàng)目結(jié)構(gòu)圖

3. 在pom.xml 中引用依賴
 
            org.springframework
            spring-context
            4.3.13.RELEASE
        
        
            org.springframework
            spring-test
            4.3.13.RELEASE
        
4. 代碼說明和實(shí)現(xiàn)
Dao層和Service層不贅述了,簡單實(shí)現(xiàn)一個(gè)add()方法
AppConfig配置類

用@Configuration注解該類,等價(jià) 與XML中配置beans;用@Bean標(biāo)注方法等價(jià)于XML中配置bean,被注解的類內(nèi)部包含有一個(gè)或多個(gè)被@Bean注解的方法
UserDaoNormal

@Configuration
public class AppConfig {
    @Bean
    public UserDao userDaoNormal(){
        System.out.println("創(chuàng)建UserDaoNormal對(duì)象");
        return new UserDaoNormal();
    @Bean
    public UserDao userDaoCache() {
         System.out.println("創(chuàng)建UserDaoCache對(duì)象");
         return new UserDaoCache();
     }
    @Bean
    public UserService userServiceNormal(UserDao userDao){
        System.out.println("創(chuàng)建一個(gè)UserService對(duì)象");
        return new UserServiceNormal(userDao);
    }
}
UserServiceTest測試類

@RunWith(SpringJUnit4ClassRunner.class),讓測試運(yùn)行于Spring測試環(huán)境
@ContextConfiguration Spring整合JUnit4測試時(shí),使用注解引入多個(gè)配置文件
多個(gè)配置文件:@ContextConfiguration(locations = { "classpath:/spring1.xml", "classpath:/spring2.xml" })

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppConfig.class)
public class UserServiceTest {
    @Autowired
    private UserService userService;
    @Test
    public void addTest(){
        userService.add();
    }
}
5.處理自動(dòng)裝配的歧義性

運(yùn)行后卻報(bào)異常出錯(cuò)!

問題是出現(xiàn)了依賴注入的歧義性,UserDao不能夠進(jìn)行自動(dòng)裝配.簡單來說,在spring容器中找到了一個(gè)以上的UserDao類型的對(duì)象,所以不知道到底要哪個(gè),我在UserDao接口寫了兩個(gè)實(shí)現(xiàn)add()方法的類,有一個(gè)UserDaoNormal對(duì)象和一個(gè)UserDaoCache對(duì)象,所以無法正常進(jìn)行依賴注入.
解決的辦法有幾個(gè):

1.@primary注解

在AppConfig配置文件里根據(jù)需要在兩個(gè)對(duì)象方法上在其中一個(gè)添加 @primary注解,說明這個(gè)對(duì)象是依賴注入的首選bean.

2.@Qualifier注解

Qualifier的意思是合格者,通過這個(gè)標(biāo)示,表明了哪個(gè)實(shí)現(xiàn)類才是我們所需要的,添加@Qualifier注解,需要注意的是@Qualifier的參數(shù)名稱為我們之前定義@Qualifier注解的名稱之一。
代碼如下

@Configuration
public class AppConfig {
    @Bean
    @Qualifier("normal")
    public UserDao userDaoNormal(){
        System.out.println("創(chuàng)建UserDaoNormal對(duì)象");
        return new UserDaoNormal();
    }
     @Bean
     @Qualifier("cache")
    public UserDao userDaoCache() {
         System.out.println("創(chuàng)建UserDaoCache對(duì)象");
         return new UserDaoCache();
     }
    @Bean
    public UserService userServiceNormal(@Qualifier("normal") UserDao userDao){
        System.out.println("創(chuàng)建一個(gè)UserService對(duì)象");
        return new UserServiceNormal(userDao);
    }
}
3.@Qualifier注解和bean id

同樣的,@Qualifier的參數(shù)名稱為我們之前定義@bean注解的名稱之一。
代碼如下:

     @Bean("normal")
    public UserDao userDaoNormal(){
        System.out.println("創(chuàng)建UserDaoNormal對(duì)象");
        return new UserDaoNormal();
    }
     @Bean("cache")
    public UserDao userDaoCache() {
         System.out.println("創(chuàng)建UserDaoCache對(duì)象");
         return new UserDaoCache();
     }
    @Bean
    public UserService userServiceNormal(@Qualifier("normal") UserDao userDao){
        System.out.println("創(chuàng)建一個(gè)UserService對(duì)象");
        return new UserServiceNormal(userDao);

如果我們不給bean起一個(gè)約定的id,會(huì)有一個(gè)默認(rèn)的id,實(shí)際上就是@bean所在的方法的方法名.@Qualifier的參數(shù)名稱為@bean所在的方法的方法名的名稱之一。
代碼如下:

@Bean
    public UserDao userDaoNormal(){
        System.out.println("創(chuàng)建UserDaoNormal對(duì)象");
        return new UserDaoNormal();
    }
     @Bean
    public UserDao userDaoCache() {
         System.out.println("創(chuàng)建UserDaoCache對(duì)象");
         return new UserDaoCache();
     }
    @Bean
    public UserService userServiceNormal(@Qualifier("userDaoCache") UserDao userDao){
        System.out.println("創(chuàng)建一個(gè)UserService對(duì)象");
        return new UserServiceNormal(userDao);
    }
6.運(yùn)行后的兩種結(jié)果


文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/73740.html

相關(guān)文章

  • spring入門指南

    摘要:裝配提供了三種裝配機(jī)制在中進(jìn)行顯示配置在中進(jìn)行顯示配置隱式的發(fā)現(xiàn)機(jī)制和自動(dòng)裝配機(jī)制。表示該類是一個(gè)組件,將自動(dòng)創(chuàng)建該組件實(shí)例,表示注入組件實(shí)例,和功能類似,和功能類似,但和是規(guī)范中提供的注解。 基本原理 spring的基礎(chǔ)是IOC和DI,其實(shí)IOC和DI是對(duì)同一件事從不同的方面進(jìn)行描述的,兩者在spring中是同一件事務(wù)。 IOC:控制反轉(zhuǎn),在這里就是指創(chuàng)建bean的主動(dòng)權(quán)發(fā)生了轉(zhuǎn)移,...

    shusen 評(píng)論0 收藏0
  • Spring - 高級(jí)裝配

    摘要:高級(jí)裝配條件化的自動(dòng)裝配與歧義性的作用域表達(dá)式語言環(huán)境與可以為不同的環(huán)境提供不同的數(shù)據(jù)庫配置加密算法等注解可以在類級(jí)別和方法級(jí)別,沒有指定的始終都會(huì)被創(chuàng)建的方式配置不同環(huán)境所需要的數(shù)據(jù)庫配置會(huì)搭建一個(gè)嵌入式的數(shù)據(jù)庫模式定義在測試數(shù)據(jù)通過加 高級(jí)裝配 Spring profile 條件化的bean 自動(dòng)裝配與歧義性 bean的作用域 Spring表達(dá)式語言 環(huán)境與profile p...

    binta 評(píng)論0 收藏0
  • Spring IOC知識(shí)點(diǎn)一網(wǎng)打盡!

    摘要:使用的好處知乎的回答不用自己組裝,拿來就用。統(tǒng)一配置,便于修改。 前言 只有光頭才能變強(qiáng) 回顧前面: 給女朋友講解什么是代理模式 包裝模式就是這么簡單啦 單例模式你會(huì)幾種寫法? 工廠模式理解了沒有? 在刷Spring書籍的時(shí)候花了點(diǎn)時(shí)間去學(xué)習(xí)了單例模式和工廠模式,總的來說還是非常值得的! 本來想的是刷完《Spring 實(shí)戰(zhàn) (第4版)》和《精通Spring4.x 企業(yè)應(yīng)用開發(fā)實(shí)戰(zhàn)》...

    djfml 評(píng)論0 收藏0
  • Spring - 裝配Bean

    摘要:裝配任何一個(gè)成功的應(yīng)用都是由多個(gè)為了實(shí)現(xiàn)某個(gè)業(yè)務(wù)目標(biāo)而相互協(xié)作的組件構(gòu)成的創(chuàng)建應(yīng)用對(duì)象之間協(xié)作關(guān)系的行為通常稱為裝配,這也是依賴注入配置的可選方案在中進(jìn)行顯示配置在中進(jìn)行顯示配置隱式的發(fā)現(xiàn)機(jī)制和自動(dòng)裝配自動(dòng)化裝配組件掃描會(huì)自動(dòng)發(fā)現(xiàn)應(yīng)用上下文 裝配Bean 任何一個(gè)成功的應(yīng)用都是由多個(gè)為了實(shí)現(xiàn)某個(gè)業(yè)務(wù)目標(biāo)而相互協(xié)作的組件構(gòu)成的 創(chuàng)建應(yīng)用對(duì)象之間協(xié)作關(guān)系的行為通常稱為裝配(wiring)...

    CNZPH 評(píng)論0 收藏0
  • 第二章 裝配Bean

    摘要:構(gòu)造器自動(dòng)裝配方法自動(dòng)裝配其他方法自動(dòng)裝配不管是構(gòu)造器,方法還是其他的方法,都會(huì)去嘗試滿足方法參數(shù)上所聲明的依賴。所以上面的輸出是構(gòu)造器自動(dòng)裝配方法自動(dòng)裝配其他方法自動(dòng)裝配使用進(jìn)行自動(dòng)裝配的時(shí)候,需要注意一下幾點(diǎn)。 完整代碼請(qǐng)見:https://github.com/codercuixi... 創(chuàng)建應(yīng)用對(duì)象之間協(xié)作關(guān)系的行為通常稱為裝配(wiring),這也是依賴注入(DI)的本質(zhì)。 ...

    xcold 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<