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

Java BeanDefination接口詳細講解

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

功能作用

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

Bean 的類名

設置父 bean 名稱、是否為 primary、

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

Bean 之間的依賴設置,dependencies

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

BeanDefinition 子類方法更為豐富些。

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

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

為什么這樣設計

假設沒有BeanDefinition

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

這個時候,由于版本更迭,xml配置的形式 被棄用,需要使用 注解的方式注解Bean,由于解析工作與實例化的代碼 冗雜在一起, xml那一套完全 不被使用, 需要重新寫一套 邊解析注解,邊實例化的 邏輯。由于設計的缺陷,導致了開發(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) //屬性設置
				.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);
	}
}

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

相關文章

  • java實現(xiàn)從方法返回多個值功能示例

    java實現(xiàn)從方法返回多個值功能示例

    這篇文章主要介紹了java實現(xiàn)從方法返回多個值功能,結(jié)合實例形式分析了集合類、封裝對象、引用傳遞三種實現(xiàn)方法,需要的朋友可以參考下
    2017-10-10
  • 使用jpa之動態(tài)插入與修改(重寫save)

    使用jpa之動態(tài)插入與修改(重寫save)

    這篇文章主要介紹了使用jpa之動態(tài)插入與修改(重寫save),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java類和對象原理與用法分析

    java類和對象原理與用法分析

    這篇文章主要介紹了java類和對象原理與用法,結(jié)合實例形式分析了java類和對象的相關概念、功能、原理、使用技巧與操作注意事項,需要的朋友可以參考下
    2020-02-02
  • Java反射的使用和原理詳解

    Java反射的使用和原理詳解

    這篇文章主要介紹了Java反射的使用和原理詳解,反射是java語言的一個特性,它允程序在運行時(注意不是編譯的時候)來進行自我檢查并且對內(nèi)部的成員進行操作,需要的朋友可以參考下
    2024-01-01
  • Eclipse中創(chuàng)建Web項目最新方法(2023年)

    Eclipse中創(chuàng)建Web項目最新方法(2023年)

    在Java開發(fā)人員中,最常用的開發(fā)工具應該就是Eclipse,下面這篇文章主要給大家介紹了關于Eclipse中創(chuàng)建Web項目2023年最新的方法,需要的朋友可以參考下
    2023-09-09
  • Java并發(fā)工具類Future使用示例

    Java并發(fā)工具類Future使用示例

    這篇文章主要介紹了Java并發(fā)工具類Future使用示例,本文需要注意future.get()方法是阻塞式的,如果調(diào)用該方法的時候任務尚未執(zhí)行完成,則會一直等待下去,直到任務執(zhí)行結(jié)束,本文通過示例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2022-06-06
  • Java模擬服務器解析web數(shù)據(jù)

    Java模擬服務器解析web數(shù)據(jù)

    本篇文章主要給大家詳細分享了搭建JavaWeb服務器的詳細步驟以及用到的代碼,對此有需要的朋友可以跟著學習下,希望能給你帶來幫助
    2021-07-07
  • Spring?Batch批處理框架操作指南

    Spring?Batch批處理框架操作指南

    Spring?Batch?是?Spring?提供的一個數(shù)據(jù)處理框架。企業(yè)域中的許多應用程序需要批量處理才能在關鍵任務環(huán)境中執(zhí)行業(yè)務操作,這篇文章主要介紹了Spring?Batch批處理框架操作指南,需要的朋友可以參考下
    2022-07-07
  • JAVA文件讀寫操作詳解

    JAVA文件讀寫操作詳解

    這篇文章主要為大家詳細介紹了JAVA文件讀寫操作,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • Java詳解聊天窗口的創(chuàng)建流程

    Java詳解聊天窗口的創(chuàng)建流程

    這篇文章主要介紹了怎么用Java來創(chuàng)建一個聊天窗口,聊天軟件我們經(jīng)常要用,但是你有想過自己怎么去實現(xiàn)它嗎,感興趣的朋友跟隨文章往下看看吧
    2022-04-04

最新評論

大悟县| 千阳县| 昌都县| 阿拉善右旗| 天台县| 镇康县| 余姚市| 射洪县| 岑溪市| 武乡县| 兴国县| 钟山县| 开平市| 绥江县| 普格县| 石台县| 洱源县| 大宁县| 新乐市| 四会市| 莒南县| 阿坝| 岑巩县| 方正县| 惠来县| 赣榆县| 白沙| 望奎县| 乐陵市| 兴国县| 黄梅县| 大厂| 东辽县| 陇南市| 孝感市| 龙南县| 凯里市| 淮南市| 鄂尔多斯市| 独山县| 若羌县|