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

Spring的Bean注入解析結(jié)果BeanDefinition詳解

 更新時(shí)間:2023年12月01日 10:17:39   作者:軍偉@  
這篇文章主要介紹了Spring的Bean注入解析結(jié)果BeanDefinition詳解,BeanDefinition描述了一個(gè)bean實(shí)例,擁有屬性值、構(gòu)造參數(shù)值和具體實(shí)現(xiàn)的其他信息,其是一個(gè)bean的元數(shù)據(jù),xml中配置的bean元素會(huì)被解析成BeanDefinition對(duì)象,需要的朋友可以參考下

Bean注入解析結(jié)果BeanDefinition

BeanDefinition描述了一個(gè)bean實(shí)例,擁有屬性值、構(gòu)造參數(shù)值和具體實(shí)現(xiàn)的其他信息,其是一個(gè)bean的元數(shù)據(jù),xml中配置的bean元素會(huì)被解析成BeanDefinition對(duì)象。

BeanDefinition的接口的結(jié)構(gòu)類(lèi)圖:

ChildBeanDefinition

  可以讓子Bean定義擁有從父母哪里繼承配置的能力。相應(yīng)的,子Bean定義有一個(gè)固定的依賴(lài)--他們的父bean定義。

  一個(gè)子bean定義將繼承父母的構(gòu)造參數(shù)值、屬性值和方法覆蓋并且可以選擇的增加新的值。 如果初始化方法、銷(xiāo)毀方法或者靜態(tài)工廠方法已經(jīng)指定了,那么將覆蓋父bean定義中的相關(guān)配置。 子bean定義保留的配置將是:依賴(lài)、自動(dòng)裝配模式、依賴(lài)檢查、單例和延遲加載。

注意: 自從Spring 2.5之后, 編程的方式注冊(cè)bean定義的優(yōu)選方法是使用 GenericBeanDefinition類(lèi), 允許使用GenericBeanDefinition.setParentName方法動(dòng)態(tài)的定義父依賴(lài)。 在大多數(shù)場(chǎng)景下可以 有效的取代ChildBeanDefinition類(lèi)。

GenericBeanDefinition

  GenericBeanDefinition是一個(gè)定義標(biāo)準(zhǔn)的bean定義的一站式服務(wù)。

  像任何Bean定義,它允許指定一個(gè)類(lèi)、可選的構(gòu)造參數(shù)值和屬性值。 除此之外可以通過(guò)配置"parentName"屬性來(lái)靈活地指定從一個(gè)父Bean定義中派生。   通常來(lái)說(shuō),使用GenericBeanDefinition類(lèi)為了注冊(cè)一個(gè)用戶(hù)可見(jiàn)的bean定義(后置處理器可能會(huì)操作它, 甚至可能重新配置父母的名字)。如果父/子關(guān)系是預(yù)設(shè)的建議使用RootBeanDefinition / ChildBeanDefinition。

RootBeanDefinition

  RootBeanDefinition描述了Spring BeanFactory運(yùn)行時(shí)合并后的特定Bean定義。

  它可能來(lái)源于多個(gè)原始Bean定義(繼承自其他的bean定義,通常被注冊(cè)為GenericBeanDefinitions)。RootBeanDefinition從本質(zhì)上將是運(yùn)行時(shí)統(tǒng)一的Bean定義視圖。   在配置階段,RootBeanDefinition也可能用于注冊(cè)獨(dú)立的bean定義。然而,自從Spring2.5依賴(lài),編程地注冊(cè)bean定義建議使用 GenericBeanDefinition類(lèi)。GenericBeanDefinition在允許動(dòng)態(tài)定義父依賴(lài)而不是硬編碼作為RootBeanDefinition方面有優(yōu)勢(shì)。

在抽象類(lèi)AbstractBeanDefinition中添加了更多和bean屬性設(shè)置相關(guān)的處理操作。

@SuppressWarnings("serial")
public abstract class AbstractBeanDefinition extends BeanMetadataAttributeAccessor
		implements BeanDefinition, Cloneable {
	public static final String SCOPE_DEFAULT = "";
	public static final int AUTOWIRE_NO = AutowireCapableBeanFactory.AUTOWIRE_NO;
	public static final int AUTOWIRE_BY_NAME = AutowireCapableBeanFactory.AUTOWIRE_BY_NAME;
	public static final int AUTOWIRE_BY_TYPE = AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE;
	public static final int AUTOWIRE_CONSTRUCTOR = AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR;
	@Deprecated
	public static final int AUTOWIRE_AUTODETECT = AutowireCapableBeanFactory.AUTOWIRE_AUTODETECT;
	public static final int DEPENDENCY_CHECK_NONE = 0;
	public static final int DEPENDENCY_CHECK_OBJECTS = 1;
	public static final int DEPENDENCY_CHECK_SIMPLE = 2;
	public static final int DEPENDENCY_CHECK_ALL = 3;
	public static final String INFER_METHOD = "(inferred)";
	private volatile Object beanClass;
	private String scope = SCOPE_DEFAULT;
	private boolean abstractFlag = false;
	private boolean lazyInit = false;
	private int autowireMode = AUTOWIRE_NO;
	private int dependencyCheck = DEPENDENCY_CHECK_NONE;
	private String[] dependsOn;
	private boolean autowireCandidate = true;
	private boolean primary = false;
	private final Map<String, AutowireCandidateQualifier> qualifiers =
			new LinkedHashMap<String, AutowireCandidateQualifier>(0);
	private boolean nonPublicAccessAllowed = true;
	private boolean lenientConstructorResolution = true;
	private ConstructorArgumentValues constructorArgumentValues;
	private MutablePropertyValues propertyValues;
	private MethodOverrides methodOverrides = new MethodOverrides();
	private String factoryBeanName;
	private String factoryMethodName;
	private String initMethodName;
	private String destroyMethodName;
	private boolean enforceInitMethod = true;
	private boolean enforceDestroyMethod = true;
	private boolean synthetic = false;
	private int role = BeanDefinition.ROLE_APPLICATION;
	private String description;
	private Resource resource;
	.........//屬性處理代碼
}

BeanDefinition源碼

public interface BeanDefinition extends AttributeAccessor, BeanMetadataElement {
	String SCOPE_SINGLETON = ConfigurableBeanFactory.SCOPE_SINGLETON;
	String SCOPE_PROTOTYPE = ConfigurableBeanFactory.SCOPE_PROTOTYPE;
	int ROLE_APPLICATION = 0;
	int ROLE_SUPPORT = 1;
	int ROLE_INFRASTRUCTURE = 2;
	String getParentName();
	void setParentName(String parentName);
	String getBeanClassName();
	void setBeanClassName(String beanClassName);
	String getFactoryBeanName();
	void setFactoryBeanName(String factoryBeanName);
	String getFactoryMethodName();
	void setFactoryMethodName(String factoryMethodName);
	String getScope();
	void setScope(String scope);
	boolean isLazyInit();
	void setLazyInit(boolean lazyInit);
	String[] getDependsOn();
	void setDependsOn(String... dependsOn);
	boolean isAutowireCandidate();
	void setAutowireCandidate(boolean autowireCandidate);
	boolean isPrimary();
	void setPrimary(boolean primary);
	ConstructorArgumentValues getConstructorArgumentValues();
	MutablePropertyValues getPropertyValues();
	boolean isSingleton();
	boolean isPrototype();
	boolean isAbstract();
	int getRole();
	String getDescription();
	String getResourceDescription();
	BeanDefinition getOriginatingBeanDefinition();
}

總結(jié)

簡(jiǎn)單來(lái)說(shuō)BeanDefinition接口及其實(shí)現(xiàn)類(lèi)就是bean的所有配置信息的一個(gè)數(shù)據(jù)集合,從類(lèi)名也可以看出其就是一個(gè)bean的定義說(shuō)明。

到此這篇關(guān)于Spring的Bean注入解析結(jié)果BeanDefinition詳解的文章就介紹到這了,更多相關(guān)Bean注入解析結(jié)果BeanDefinition內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java獲取http和https協(xié)議返回的json數(shù)據(jù)

    Java獲取http和https協(xié)議返回的json數(shù)據(jù)

    本篇文章主要介紹了Java獲取http和https協(xié)議返回的json數(shù)據(jù) ,本篇文章提供兩個(gè)方法,幫助各位如何獲取http和https返回的數(shù)據(jù)。有興趣的可以了解一下。
    2017-01-01
  • SpringBoot開(kāi)發(fā)技巧啟動(dòng)時(shí)配置校驗(yàn)實(shí)現(xiàn)示例

    SpringBoot開(kāi)發(fā)技巧啟動(dòng)時(shí)配置校驗(yàn)實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了SpringBoot開(kāi)發(fā)在啟動(dòng)時(shí)自動(dòng)配置校驗(yàn)的實(shí)現(xiàn)示例及原理解析,有需要的朋友可以借鑒參考下希望能夠有所幫助
    2021-10-10
  • idea 無(wú)法debug調(diào)試的解決方案

    idea 無(wú)法debug調(diào)試的解決方案

    這篇文章主要介紹了idea 無(wú)法debug調(diào)試的解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 淺析java 希爾排序(Shell)算法

    淺析java 希爾排序(Shell)算法

    這篇文章主要介紹了淺析java 希爾排序(Shell)算法的原理以及示例,需要的朋友可以參考下
    2015-02-02
  • springboot整合dubbo設(shè)置全局唯一ID進(jìn)行日志追蹤的示例代碼

    springboot整合dubbo設(shè)置全局唯一ID進(jìn)行日志追蹤的示例代碼

    這篇文章主要介紹了springboot整合dubbo設(shè)置全局唯一ID進(jìn)行日志追蹤,本文通過(guò)圖文示例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Spring系列中的beanFactory與ApplicationContext

    Spring系列中的beanFactory與ApplicationContext

    這篇文章主要介紹了Spring系列中的beanFactory與ApplicationContext,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • SpringMVC Mybatis配置多個(gè)數(shù)據(jù)源并切換代碼詳解

    SpringMVC Mybatis配置多個(gè)數(shù)據(jù)源并切換代碼詳解

    這篇文章主要介紹了SpringMVC Mybatis配置多個(gè)數(shù)據(jù)源并切換代碼詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 快速理解spring中的各種注解

    快速理解spring中的各種注解

    這篇文章主要介紹了快速理解spring中的各種注解,具有一定借鑒價(jià)值,需要的朋友可以了解下。
    2017-12-12
  • 有關(guān)ServletConfig與ServletContext的訪(fǎng)問(wèn)

    有關(guān)ServletConfig與ServletContext的訪(fǎng)問(wèn)

    下面小編就為大家?guī)?lái)一篇有關(guān)ServletConfig與ServletContext的訪(fǎng)問(wèn)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • java中抽象類(lèi)、抽象方法、接口與實(shí)現(xiàn)接口實(shí)例詳解

    java中抽象類(lèi)、抽象方法、接口與實(shí)現(xiàn)接口實(shí)例詳解

    這篇文章主要給大家介紹了關(guān)于java中抽象類(lèi)、抽象方法、接口與實(shí)現(xiàn)接口的相關(guān)資料,文中通過(guò)示例代碼將四者介紹的非常詳細(xì),并且簡(jiǎn)單介紹了抽象類(lèi)和接口的區(qū)別,需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11

最新評(píng)論