欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java BeanDefination接口詳細講解

 更新時間:2022年11月18日 09:07:08   作者:氵奄不死的魚  
BeanDefinition是spring里面bean的一個建模對象,就相當于class對象是普通java對象的建模對象一樣??赡茉趕pring作用的各種業(yè)務場景中,class對象并不能完成spring對bean的抽象,所以弄了一個BeanDefinition作為bean的抽象建模對象

功能作用

BeanDefinition 是定義 Bean 的配置元信息接口,包含:

Bean 的類名

設(shè)置父 bean 名稱、是否為 primary、

Bean 行為配置信息,作用域、自動綁定模式、生命周期回調(diào)、延遲加載、初始方法、銷毀方法等

Bean 之間的依賴設(shè)置,dependencies

構(gòu)造參數(shù)、屬性設(shè)置

BeanDefinition 子類方法更為豐富些。

派生出 AnnotatedBeanDefinition 接口,以及常用子類 RootBeanDefinition、GenericBeanDefinition。

可以使用 BeanDefinitionBuilder 或 new BeanDefinition 實現(xiàn)類構(gòu)建 BeanDefinition 對象。

為什么這樣設(shè)計

假設(shè)沒有BeanDefinition

假設(shè)沒有 沒有BeanDefinition 這一層的存在,Spring 實例化Bean的模型是這樣的,

這個時候,由于版本更迭,xml配置的形式 被棄用,需要使用 注解的方式注解Bean,由于解析工作與實例化的代碼 冗雜在一起, xml那一套完全 不被使用, 需要重新寫一套 邊解析注解,邊實例化的 邏輯。由于設(shè)計的缺陷,導致了開發(fā)的工作量提升, 且代碼復用性 也不高。

有BeanDefinition

現(xiàn)在 存在BeanDefinition,Spring 解析xml文件,實例化Bean的模型是這樣的,

此時需要增加 掃描注解 實例化Bean的邏輯,那么就只有 解析的工作不一樣,后面的實例化部分的邏輯可以共用。 而解析 其實只是 ioc 很小的一部分而已。實現(xiàn)了 解析配置和 實例化的耦合,增加了代碼的復用性,可維護性, 可拓展性。

如果 再需要加一種 注冊Bean的方式, 比如文件,網(wǎng)絡,那么只要 拓展 對應的解析階段的邏輯 , 保持 實例化Bean的邏輯不變。

BeanDefinition 屬性介紹

示例

User.java

package constxiong;
public class User {
	private Integer id;
	private String name;
	public User() {
	}
	public User(Integer id, String name) {
		this.id = id;
		this.name = name;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer 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 + "]";
	}
}

構(gòu)建和注冊 BeanDefinition 對象測試類

package constxiong;
import org.springframework.beans.factory.config.ConstructorArgumentValues;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.support.RootBeanDefinition;
/**
 * 測試 BeanDefinition 構(gòu)建
 * @author ConstXiong
 */
public class Test {
	public static void main(String[] args) {
		DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
		// BeanDefinitionBuilder 構(gòu)建 BeanDefinition
		BeanDefinitionBuilder builder = BeanDefinitionBuilder
				.genericBeanDefinition(User.class)
				.addPropertyValue("id", 1) //屬性設(shè)置
				.addPropertyValue("name", "constxiong");
		beanFactory.registerBeanDefinition("user1", builder.getBeanDefinition());
		User user = beanFactory.getBean("user1", User.class);
		System.out.println(user);
		//直接 new 的方式,創(chuàng)建 BeanDefinitionBuilder 對象
		RootBeanDefinition beanDefinition = new RootBeanDefinition(User.class);
		//構(gòu)造參數(shù)
		ConstructorArgumentValues constructorArgumentValues = new ConstructorArgumentValues();
		constructorArgumentValues.addIndexedArgumentValue(0, 1);
		constructorArgumentValues.addIndexedArgumentValue(1, "user2");
		beanDefinition.setConstructorArgumentValues(constructorArgumentValues);
		beanFactory.registerBeanDefinition("user2", beanDefinition);
		User user2 = beanFactory.getBean("user2", User.class);
		System.out.println(user2);
	}
}

到此這篇關(guān)于Java BeanDefination接口詳細講解的文章就介紹到這了,更多相關(guān)Java BeanDefination內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot實現(xiàn)ImportBeanDefinitionRegistrar動態(tài)注入

    SpringBoot實現(xiàn)ImportBeanDefinitionRegistrar動態(tài)注入

    在閱讀Spring Boot源碼時,看到Spring Boot中大量使用ImportBeanDefinitionRegistrar來實現(xiàn)Bean的動態(tài)注入,它是Spring中一個強大的擴展接口,本文就來詳細的介紹一下如何使用,感興趣的可以了解一下
    2024-02-02
  • 實例講解Java 自旋鎖

    實例講解Java 自旋鎖

    這篇文章主要介紹了Java 自旋鎖的相關(guān)資料,幫助大家更好的理解和學習Java并發(fā),感興趣的朋友可以了解下
    2020-09-09
  • SpringBoot整合activemq的案例代碼

    SpringBoot整合activemq的案例代碼

    ActiveMQ是消息隊列技術(shù),為解決高并發(fā)問題而生,本文通過案例代碼給大家介紹pringBoot整合activemq的詳細過程,感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • Java解析XML的四種方法詳解

    Java解析XML的四種方法詳解

    XML現(xiàn)在已經(jīng)成為一種通用的數(shù)據(jù)交換格式,平臺的無關(guān)性使得很多場合都需要用到XML。本文將詳細介紹用Java解析XML的四種方法
    2012-10-10
  • Spring Boot高效數(shù)據(jù)聚合之道深入講解

    Spring Boot高效數(shù)據(jù)聚合之道深入講解

    這篇文章主要給大家介紹了關(guān)于Spring Boot高效數(shù)據(jù)聚合之道的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Spring Boot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-06-06
  • Java 中的 BufferedWriter 介紹_動力節(jié)點Java學院整理

    Java 中的 BufferedWriter 介紹_動力節(jié)點Java學院整理

    BufferedWriter 是緩沖字符輸出流。它繼承于Writer。接下來通過本文給大家分享Java 中的 BufferedWriter知識,需要的朋友參考下吧
    2017-05-05
  • Java實現(xiàn)調(diào)用第三方相關(guān)接口

    Java實現(xiàn)調(diào)用第三方相關(guān)接口

    最近在做一個項目,需要調(diào)用第三方接口,本文主要介紹了Java實現(xiàn)調(diào)用第三方相關(guān)接口,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • SpringBoot實現(xiàn)Server-Sent Events(SSE)的使用完整指南

    SpringBoot實現(xiàn)Server-Sent Events(SSE)的使用完整指南

    使用SpringBoot實現(xiàn)Server-Sent Events(SSE)可以有效處理實時數(shù)據(jù)推送需求,具有單向通信、輕量級和高實時性等優(yōu)勢,本文詳細介紹了在SpringBoot中創(chuàng)建SSE端點的步驟,并通過代碼示例展示了客戶端如何接收數(shù)據(jù),適用于實時通知、數(shù)據(jù)展示和在線聊天等場景
    2024-09-09
  • java+vue實現(xiàn)添加單選題、多選題到題庫功能

    java+vue實現(xiàn)添加單選題、多選題到題庫功能

    這篇文章主要為大家詳細介紹了java+vue實現(xiàn)添加單選題、多選題到題庫功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • IDEA中Maven依賴下載失敗的完美解決方案

    IDEA中Maven依賴下載失敗的完美解決方案

    使用IDEA進行Maven項目開發(fā)時,時不時會遇到pom.xml報錯的情況,其中很大概率是因為Maven依賴的jar包下載失敗,找來找去也沒有找到是什么問題,困擾了很多程序猿,這里給出IDEA中Maven依賴下載失敗解決方案,給大家參考,實測有用
    2020-04-04

最新評論