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

Springbean的幾種注入方式都了解嗎

 更新時間:2020年01月18日 09:55:51   作者:java圈  
這篇文章主要介紹了Springbean的幾種注入方式都了解嗎,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

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

XML注入

在springboot框架沒有出來之前,xml配置被大量的使用,配置過程比較繁瑣,但是對代碼的侵入性較小,配置和代碼分離操作。

實(shí)體定義

定義兩個屬性id,name,并實(shí)現(xiàn)get/set方法,重寫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文件,并填充對應(yīng)的bean配置,bean需要配置id或者name值,IOC容器唯一即可,class配置定義的實(shí)體路徑,對應(yīng)的property設(shè)置初始化屬性。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    https://www.springframework.org/schema/beans/spring-beans.xsd">
  <bean id="user" class="cn.cnzcb.spring.bean.UserXml">
    <property name="id" value="11"/>
    <property name="name" value="java圈"/>
  </bean>
</beans>

輸出

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

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

注解注入

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

實(shí)體定義

實(shí)體通XML實(shí)體作用類似,這里新建一個類,用去區(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  '\'' 
        '}';
  }

注解配置

正常情況下我們是通過標(biāo)準(zhǔn)注解@Configuration進(jìn)行掃描注入,我們這里直接配置類即可,在這個類里面實(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功能類似,只是加載渠道不一樣,把定義的配置類注冊到IOC容器,調(diào)用register方法,這里需要注意,下一步需要調(diào)refresh方法就行bean的裝載工作,然后通過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)的,一個bean組件對應(yīng)一個BeanDefinition,但是實(shí)際操作過程中不會這個用,只是僅供參考。

實(shí)體定義

實(shí)體通XML實(shí)體作用類似,這里新建一個類,用去區(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  '\'' 
        '}';
  }
}

輸出

通過BeanDefinitionBuilder的genericBeanDefinition實(shí)例化一個構(gòu)造器,傳入的參數(shù)就是實(shí)體類,構(gòu)建之后做初始化操作,之后BeanDefinition聲明調(diào)用getBeanDefinition方法,通過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注入對象UserBeanDefition{id="  id ",name=" name "}");
 

結(jié)果輸出

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

userXml XML注入對象:User{id='11', name='java圈'}
UserAnnotation注解注入User{id='11', name='java圈'}
BeanDefinition注入對象UserBeanDefition{id=11,name=java圈}
 

源代碼:https://github.com/itrickzhang/spring-demo

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot Application的exclude不生效問題及排查

    SpringBoot Application的exclude不生效問題及排查

    這篇文章主要介紹了SpringBoot Application的exclude不生效問題及排查,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • SpringMVC的最小化配置說明

    SpringMVC的最小化配置說明

    這篇文章主要介紹了SpringMVC的最小化配置說明,Spring MVC是一個基于Java的Web框架,用于構(gòu)建靈活、高效的Web應(yīng)用程序,它采用了MVC的設(shè)計模式,將應(yīng)用程序的邏輯分為模型、視圖和控制器三個部分,以實(shí)現(xiàn)代碼的分離和重用,需要的朋友可以參考下
    2023-10-10
  • JSP常用七大動作指令實(shí)例解析

    JSP常用七大動作指令實(shí)例解析

    這篇文章主要介紹了JSP常用七大動作指令實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • Mybatis逆工程jar包的修改和打包

    Mybatis逆工程jar包的修改和打包

    這篇文章主要介紹了Mybatis逆工程jar包的修改和打包的相關(guān)資料,需要的朋友可以參考下
    2016-06-06
  • java遍歷http請求request的所有參數(shù)實(shí)現(xiàn)方法

    java遍歷http請求request的所有參數(shù)實(shí)現(xiàn)方法

    下面小編就為大家?guī)硪黄猨ava遍歷http請求request的所有參數(shù)實(shí)現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • springboot中swagger、異步/定時/郵件任務(wù)的問題

    springboot中swagger、異步/定時/郵件任務(wù)的問題

    這篇文章主要介紹了springboot中swagger、異步/定時/郵件任務(wù)的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • ssm框架+PageHelper插件實(shí)現(xiàn)分頁查詢功能

    ssm框架+PageHelper插件實(shí)現(xiàn)分頁查詢功能

    今天小編教大家如何通過ssm框架+PageHelper插件實(shí)現(xiàn)分頁查詢功能,首先大家需要新建一個maven工程引入jar包,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-06-06
  • SpringBoot使用Filters實(shí)現(xiàn)請求過濾和預(yù)處理

    SpringBoot使用Filters實(shí)現(xiàn)請求過濾和預(yù)處理

    過濾器(Filter)是一種在Web應(yīng)用中用于攔截和處理HTTP請求和響應(yīng)的對象,在Java Web開發(fā)中,過濾器是實(shí)現(xiàn)特定功能,如認(rèn)證、日志記錄和字符編碼處理的重要工具,本文主要介紹了SpringBoot使用Filters實(shí)現(xiàn)請求過濾和預(yù)處理,需要的朋友可以參考下
    2024-08-08
  • 深入淺析Java 循環(huán)中標(biāo)簽的作用

    深入淺析Java 循環(huán)中標(biāo)簽的作用

    這篇文章主要介紹了深入淺析Java 循環(huán)中標(biāo)簽的作用的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • idea配置Tomcat時沒有Artifacts選項的解決方法

    idea配置Tomcat時沒有Artifacts選項的解決方法

    本文主要介紹了idea配置Tomcat時沒有Artifacts選項的解決方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05

最新評論

绥滨县| 徐闻县| 朝阳区| 平昌县| 公安县| 垫江县| 板桥市| 马边| 怀化市| 吴堡县| 时尚| 陇南市| 遵义县| 商南县| 安顺市| 郧西县| 绥芬河市| 汝南县| 濮阳县| 建宁县| 浮山县| 阿拉尔市| 祁连县| 酉阳| 绿春县| 天台县| 乌鲁木齐市| 汝州市| 奉新县| 临西县| 治县。| 分宜县| 五峰| 洛阳市| 彰化市| 黎川县| 中西区| 桂林市| 永丰县| 彝良县| 平遥县|