91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Springbean的注入方式什么

發布時間:2021-10-15 17:23:58 來源:億速云 閱讀:129 作者:柒染 欄目:編程語言

今天就跟大家聊聊有關Springbean的注入方式什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

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

XML注入

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

實體定義

定義兩個屬性id,name,并實現get/set方法,重寫toString方法,方便看打印結果。

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文件,并填充對應的bean配置,bean需要配置id或者name值,IOC容器唯一即可,class配置定義的實體路徑,對應的property設置初始化屬性。

<?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>

輸出

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

//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之后才出現的,大量應用也是在springboot的普及下,大家才慢慢接受。其主要好處就是操作簡單,通過簡單的注解就可以標識成bean組件,而且擴展了各種層次的注解,比如@Service、@Service、@Repository,都是基于@Component注解實現派生。

實體定義

實體通XML實體作用類似,這里新建一個類,用去區分不同的bean實現方式。

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  '\''         '}';  }

注解配置

正常情況下我們是通過標準注解@Configuration進行掃描注入,我們這里直接配置類即可,在這個類里面實例化bean組件,并進行初始化操作。

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

輸出

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

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

BeanDefinition注入

BeanDefinition是BeanFactory的底層實現,包括上面提到的方式,底層也是基于BeanDefinition實現的,一個bean組件對應一個BeanDefinition,但是實際操作過程中不會這個用,只是僅供參考。

實體定義

實體通XML實體作用類似,這里新建一個類,用去區分不同的bean實現方式。

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實例化一個構造器,傳入的參數就是實體類,構建之后做初始化操作,之后BeanDefinition聲明調用getBeanDefinition方法,通過getPropertyValues回去bean的具體參數進行結束輸出。

//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 "}");

結果輸出

輸出結果分別是xml注入、annotation注入,BeanDefinition注入。

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

看完上述內容,你們對Springbean的注入方式什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

江永县| 江西省| 安岳县| 定南县| 渭源县| 琼结县| 龙岩市| 博客| 原阳县| 鸡西市| 道孚县| 龙口市| 商南县| 日照市| 丘北县| 满洲里市| 襄樊市| 东乌| 长宁区| 遂平县| 海原县| 桓台县| 建瓯市| 远安县| 金沙县| 洞口县| 莱芜市| 阳原县| 航空| 轮台县| 临沧市| 周口市| 宁乡县| 黄浦区| 吉木乃县| 万源市| 柘荣县| 和平区| 沙坪坝区| 富阳市| 佛山市|