この記事では、Spring ソース コードの BeanDefinition クラスについて詳しく説明します。これには特定の参考値があります。必要な友人は参照できます。お役に立てば幸いです。
Spring のバージョンは 5.1.5
Spring を使用したことのある人なら誰でも、オブジェクトを Spring コンテナに挿入し、Spring に管理させていることを知っています。この種のオブジェクトは Bean オブジェクトと呼ばれます。しかし、これらの Bean オブジェクトは Spring コンテナ内にどのような形式で存在し、どのような属性や動作を持っているのでしょうか?今日は Spring のソースコードを入力して調べます。
Bean 作成ファクトリ BeanFactory には、デフォルトの実装クラス DefaultListableBeanFactory があり、これには、注入されたすべての Bean オブジェクト情報を格納する Map が含まれています
/** Map of bean definition objects, keyed by bean name. */ private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256);
Map の値オブジェクト BeanDefinition は、Spring の Bean の定義と説明です。具体的な概要は次のとおりです。
属性 | 動作 | 説明 |
---|---|---|
parentName | String getParentName(); void setParentName(@Nullable StringparentName); |
Bean 定義オブジェクトの親クラス定義オブジェクト名 |
beanClassName | String getBeanClassName(); void setBeanClassName(@Nullable String beanClassName); |
Bean オブジェクトの実際のクラス クラス |
scope | String getScope(); void setScope(@Nullable Stringscope); |
Bean オブジェクトがシングルトンであるかどうか<シングルトンかプロトタイプ> ; |
lazyInit | boolean isLazyInit(); void setLazyInit(boolean LazyInit); | 遅延読み込みかどうか |
String[] getDependsOn(); | void setDependsOn(@Nullable String... dependsOn); | 依存 Bean オブジェクトを設定します。依存 Bean オブジェクトBean オブジェクトは最初に作成されます|
boolean isAutowireCandidate(); | void setAutowireCandidate(boolean autowireCandidate); | 自動注入を行うかどうかを設定します。 @Autowired アノテーションにのみ有効で、設定ファイルはプロパティ display|
boolean isPrimary(); | void setPrimary(boolean Primary); を通じて挿入できます。 | Bean を主候補 Bean として設定します。同じインターフェースまたはクラスの複数の実装クラスが Spring コンテナーに複数回注入される場合、この属性を使用して Bean を主候補 Bean として構成します。タイプ別に注入する場合、デフォルトでは主候補 Bean を注入に使用します|
String getFactoryBeanName(); | void setFactoryBeanName(@Nullable String FactoryBeanName); | 作成された Bean のファクトリ名を設定します|
String getFactoryMethodName(); | void setFactoryMethodName(@Nullable String FactoryMethodName); | Bean を作成する特定のメソッドを設定しますBean が作成されるファクトリー|
String getInitMethodName(); | void setInitMethodName(@Nullable String initMethodName); | Set Bean 作成時のデフォルトの初期化メソッド|
String getDestroyMethodName(); | void setDestroyMethodName(@Nullable String destroyMethodName); | Beanを破棄する際に呼び出されるメソッド名を設定します。 |
int getRole(); | void setRole(int role);# を呼び出すには、コンテキストの close() メソッドを呼び出す必要があることに注意してください。 ##Bean 分類を設定します | |
String getDescription(); | void setDescription(@Nullable String description);# #Bean の場合 オブジェクトの説明 |
package com.yuanweiquan.learn.bean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Description; public class MyTestBean { @Autowired private AutowireCandidateBean autowireCandidateBean; public void init() { System.out.println("inti MyTestBean"); } public AutowireCandidateBean getAutowireCandidateBean() { return autowireCandidateBean; } public void setAutowireCandidateBean(AutowireCandidateBean bean) { this.autowireCandidateBean = bean; } }
構成ファイル applicationContext.xmlpackage com.yuanweiquan.learn.bean; public class AutowireCandidateBean { public void initBean() { System.out.println("init AutowireCandidateBean"); } public void destroyBean() { System.out.println("destroy AutowireCandidateBean"); } }ログイン後にコピー
<bean id="myTestBean" class="com.yuanweiquan.learn.bean.MyTestBean" depends-on="autowireCandidateBean" init-method="init"/> <bean id="autowireCandidateBean" class="com.yuanweiquan.learn.bean.AutowireCandidateBean" init-method="initBean" autowire-candidate="true" destroy-method="destroyBean" scope="singleton" parent="myTestBean" lazy-init="default" primary="true"> <description>autowireCandidateBean description</description> </bean> で構成する方法を見てみましょう<p>次のステップはテスト コードです</p> <pre class="brush:php;toolbar:false">FileSystemXmlApplicationContext factory = new FileSystemXmlApplicationContext("classpath:applicationContext.xml"); BeanDefinition myTestBeanDefinition = factory.getBeanFactory().getBeanDefinition("autowireCandidateBean"); //输出 System.out.println("bean description:" + myTestBeanDefinition.getDescription()); System.out.println("bean class name:" + myTestBeanDefinition.getBeanClassName()); System.out.println("parent name:" + myTestBeanDefinition.getParentName()); System.out.println("scope:" + myTestBeanDefinition.getScope()); System.out.println("is lazyinit:" + myTestBeanDefinition.isLazyInit()); System.out.println("depends On:" + myTestBeanDefinition.getDependsOn()); System.out.println("is autowireCandidate:" + myTestBeanDefinition.isAutowireCandidate()); System.out.println("is primary:" + myTestBeanDefinition.isPrimary()); System.out.println("factory bean name:"+myTestBeanDefinition.getFactoryBeanName()); System.out.println("factory bean method name:" + myTestBeanDefinition.getFactoryMethodName()); System.out.println("init method name:" + myTestBeanDefinition.getInitMethodName()); System.out.println("destory method name:" + myTestBeanDefinition.getDestroyMethodName()); System.out.println("role:" + myTestBeanDefinition.getRole()); //关闭context,否则不会调用bean的销毁方法 factory.close();ログイン後にコピーコンソール出力は次のとおりです
init AutowireCandidateBean inti MyTestBean bean description:autowireCandidateBean description bean class name:com.yuanweiquan.learn.bean.AutowireCandidateBean parent name:myTestBean scope:singleton is lazyinit:false depends On:null is autowireCandidate:true is primary:true factory bean name:null factory bean method name:null init method name:initBean destory method name:destroyBean role:0 destroy AutowireCandidateBeanログイン後にコピーここまでの情報により、各属性に対応する値が明確にわかります。上記のテスト コードの目的は、Bean が Spring コンテナ内にどのような形式で存在するか、Bean がどのような特定の属性を持っているか、属性の値とデフォルト値を確認できるようにすることです。これは、春の容器に豆が入っていることを事前に明らかにするものと考えられますが、実際には、私たちが想像しているほど神秘的なものではありません。
以上がSpring ソース コードの BeanDefinition クラスの詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。