真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Springbean中Spring注入方式有哪些

這篇文章主要介紹Springbean中Spring注入方式有哪些,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

成都服務(wù)器托管,創(chuàng)新互聯(lián)提供包括服務(wù)器租用、服務(wù)器托管、帶寬租用、云主機(jī)、機(jī)柜租用、主機(jī)租用托管、CDN網(wǎng)站加速、主機(jī)域名等業(yè)務(wù)的一體化完整服務(wù)。電話(huà)咨詢(xún):13518219792

Spring注入方式可以分為三類(lèi),xml注入、注解注入、BeanDefinition注入;用法上可以分為三種,但是底層實(shí)現(xiàn)代碼都是統(tǒng)一BeanFactory,這三種也有聯(lián)系xml注入和annotation注入都是依賴(lài)BeanDefinition擴(kuò)展的接口,注解也是從xml過(guò)渡過(guò)來(lái)的,我們簡(jiǎn)單的看下這三種的寫(xiě)法。

XML注入

在springboot框架沒(méi)有出來(lái)之前,xml配置被大量的使用,配置過(guò)程比較繁瑣,但是對(duì)代碼的侵入性較小,配置和代碼分離操作。

實(shí)體定義

定義兩個(gè)屬性id,name,并實(shí)現(xiàn)get/set方法,重寫(xiě)toString方法,方便看打印結(jié)果。

public class UserXml {
  private String id;
  private String name;

  public String getId() {
    return id;
  }

  public void setId(String id) {
    this.id = id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  @Override
  public String toString() {
    return "User{" 
        "id='"  id  '\'' 
        ", name='"  name  '\'' 
        '}';
  }
}

xml定義

在resources下新建目錄META-INF下建spring-bean.xml文件,并填充對(duì)應(yīng)的bean配置,bean需要配置id或者name值,IOC容器唯一即可,class配置定義的實(shí)體路徑,對(duì)應(yīng)的property設(shè)置初始化屬性。



  
    
    
  

輸出

創(chuàng)建一個(gè)BeanFactory對(duì)象,用ClassPathXmlApplicationContext實(shí)例化,簡(jiǎn)單說(shuō)一下BeanFactory作為IOC容器的底層基礎(chǔ),可以說(shuō)IOC容器就是BeanFactory,ClassPathXmlApplicationContext是IOC容器的功能擴(kuò)展;ClassPathXmlApplicationContext需要傳入資源文件的路徑,在通過(guò)getBean方法獲取具體的實(shí)體類(lèi),就是結(jié)果輸出。

 //xml注入
    BeanFactory classPathXmlApplicationContext = new ClassPathXmlApplicationContext("classpath:/META-INF/spring-bean.xml");
    UserXml userXml = classPathXmlApplicationContext.getBean(UserXml.class);
    System.out.println("userXml XML注入對(duì)象:"  userXml);

注解注入

注解是在spring2.0.3之后才出現(xiàn)的,大量應(yīng)用也是在springboot的普及下,大家才慢慢接受。其主要好處就是操作簡(jiǎn)單,通過(guò)簡(jiǎn)單的注解就可以標(biāo)識(shí)成bean組件,而且擴(kuò)展了各種層次的注解,比如@Service、@Service、@Repository,都是基于@Component注解實(shí)現(xiàn)派生。

實(shí)體定義

實(shí)體通XML實(shí)體作用類(lèi)似,這里新建一個(gè)類(lèi),用去區(qū)分不同的bean實(shí)現(xiàn)方式。

public class UserAnnotation {
  private String id;
  private String name;

  public String getId() {
    return id;
  }

  public void setId(String id) {
    this.id = id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  @Override
  public String toString() {
    return "User{" 
        "id='"  id  '\'' 
        ", name='"  name  '\'' 
        '}';
  }

注解配置

正常情況下我們是通過(guò)標(biāo)準(zhǔn)注解@Configuration進(jìn)行掃描注入,我們這里直接配置類(lèi)即可,在這個(gè)類(lèi)里面實(shí)例化bean組件,并進(jìn)行初始化操作。

@Configuration
public class UserConfiguration {
  @Bean
  public UserAnnotation userAnnotation(){
    UserAnnotation userAnnotation = new UserAnnotation();
    userAnnotation.setId("11");
    userAnnotation.setName("java圈");
    return userAnnotation;
  }
}

輸出

AnnotationConfigApplicationContext也是BeanFactory的一種實(shí)現(xiàn),和ClassPathXmlApplicationContext功能類(lèi)似,只是加載渠道不一樣,把定義的配置類(lèi)注冊(cè)到IOC容器,調(diào)用register方法,這里需要注意,下一步需要調(diào)refresh方法就行bean的裝載工作,然后通過(guò)getBean獲取具體的實(shí)體,就行輸出。

 //注解注入
    AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext();
    annotationConfigApplicationContext.register(UserConfiguration.class);
    annotationConfigApplicationContext.refresh();
    UserAnnotation userAnnotation = annotationConfigApplicationContext.getBean(UserAnnotation.class);
    System.out.println("UserAnnotation注解注入" userAnnotation);

BeanDefinition注入

BeanDefinition是BeanFactory的底層實(shí)現(xiàn),包括上面提到的方式,底層也是基于BeanDefinition實(shí)現(xiàn)的,一個(gè)bean組件對(duì)應(yīng)一個(gè)BeanDefinition,但是實(shí)際操作過(guò)程中不會(huì)這個(gè)用,只是僅供參考。

實(shí)體定義

實(shí)體通XML實(shí)體作用類(lèi)似,這里新建一個(gè)類(lèi),用去區(qū)分不同的bean實(shí)現(xiàn)方式。

public class UserBeanDefinition {
  private String id;
  private String name;

  public String getId() {
    return id;
  }

  public void setId(String id) {
    this.id = id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  @Override
  public String toString() {
    return "User{" 
        "id='"  id  '\'' 
        ", name='"  name  '\'' 
        '}';
  }
}

輸出

通過(guò)BeanDefinitionBuilder的genericBeanDefinition實(shí)例化一個(gè)構(gòu)造器,傳入的參數(shù)就是實(shí)體類(lèi),構(gòu)建之后做初始化操作,之后BeanDefinition聲明調(diào)用getBeanDefinition方法,通過(guò)getPropertyValues回去bean的具體參數(shù)進(jìn)行結(jié)束輸出。

//BeanDefinition注入
    BeanDefinitionBuilder definitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(UserBeanDefinition.class);
    definitionBuilder.addPropertyValue("id", "11");
    definitionBuilder.addPropertyValue("name", "java圈");
    BeanDefinition beanDefinition = definitionBuilder.getBeanDefinition();
    String beanClassName = beanDefinition.getBeanClassName();
    MutablePropertyValues mutablePropertyValues = beanDefinition.getPropertyValues();
    String id = mutablePropertyValues.getPropertyValue("id").getValue().toString();
    String name = mutablePropertyValues.getPropertyValue("name").getValue().toString();
    System.out.println("BeanDefinition注入對(duì)象UserBeanDefition{id="  id ",name=" name "}");

結(jié)果輸出

輸出結(jié)果分別是xml注入、annotation注入,BeanDefinition注入。

userXml XML注入對(duì)象:User{id='11', name='java圈'}
UserAnnotation注解注入U(xiǎn)ser{id='11', name='java圈'}
BeanDefinition注入對(duì)象UserBeanDefition{id=11,name=java圈}

以上是“Springbean中Spring注入方式有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


分享題目:Springbean中Spring注入方式有哪些
網(wǎng)頁(yè)URL:http://weahome.cn/article/psehcd.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部