/ ** ; *容器アセンブリに登録 * 1)、パケット・アセンブリは、(コントローラ/ @サービス/ @の@スキャン+注釈を付し [リポジトリ/コンポーネント@) 自分の書き込みにクラスを] * 2)、ビーン@ [インポート第三者】パッケージアセンブリ内の 3 *)、@インポート[迅速容器アセンブリに導入] * 1)、@インポート(成分が容器内に導入される)。この容器アセンブリは自動的に登録され、全クラスのid名前 * 2)、ImportSelector:コンポーネントは、アレイの完全なクラス名をインポートする必要が戻り、 * 3)、ImportBeanDefinitionRegistrarを:手動で容器内にBeanを登録 4)、FactoryBeanのスプリングを使用して(植物豆)を提供*; 。* 1)、デフォルトの取得豆の植物はgetObjectメソッドが作成されたオブジェクトを呼び出すことです * 2)、豆の工場自体を取得するために、我々は、上記のIDを言及したの前に&を追加する必要があります *&colorFactoryBean * /
コンテナへの春のコンテナでは、4つのコンポーネントにまとめた一般的な方法を登録:
まず、@ComponentScan @ComponentScans注釈または注釈を使用して走査登録パケットを用いる方法は、使用するための登録、および他の注釈をベース@Component注釈は@Controller @Service前記組成物アノテーションは、@Componentは、その中に含まれています。
第二に、構成情報登録豆の種類は、@Beanノートが@Configurationを含むクラスの設定で登録された使用します
第三は、@import注釈登録、3つの方法の登録、1、直接registerBeanDefinitions方法ImportBeanDefinitionRegistrarインタフェースを達成するために、selectImports方法ImportSelectorインタフェース3を達成するために、2を登録するクラス名をロードすることによって、我々は2つの焦点を記述します種類の、よく、または直接コードに。
パブリッククラスMyImportSelectorを実装ImportSelector {
@Override
パブリック文字列[] selectImports(AnnotationMetadata importingClassMetadata){
Returnを新しいString [] { "com.yuan.model.AAA" }。
}
}
MyImportBeanDefinitionRegistrar実装クラス公開ImportBeanDefinitionRegistrar {
/ *
AnnotationMetadata:現在のアノテーション情報
BeanDefinitionRegistry:BeanDefinition登録クラス
* /
@Override
公共ボイドregisterBeanDefinitions(AnnotationMetadata importingClassMetadata、BeanDefinitionRegistryレジストリ){
ブールB = registry.containsBeanDefinition(「com.yuan.model.AAA " ); IF (B) { ビーン(Beanタイプを開発するための//定義情報) RootBeanDefinition RootBeanDefinition =新しい新しいRootBeanDefinition(bbb.class ); // Beanを登録します。豆名registry.registerBeanDefinition( "B"の開発、RootBeanDefinition);}}}
パブリッククラスのMyApp {
公共の静的な無効メイン(文字列[]引数){
AnnotationConfigApplicationContextコンテキスト=新しいAnnotationConfigApplicationContext(MyConfig.class )。
文字列[] beanDefinitionNamesの=のcontext.getBeanDefinitionNames()。 用(文字列ビーン:beanDefinitionNames) { のSystem.out.println(豆)。 } AAA豆= context.getBean(AAA.class )。System.out.println(豆)。}}
結果:
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
MYCONFIG
com.yuan。 model.AAAの
Bの
AAA {ID = 1、名前= '123456'}
AAAクラスとBは、ばねコンテナに登録されています。
方法を実装する第四に、FactoryBeanの実装インタフェース、
パブリック実装クラスCCCFactoryBean FactoryBeanの{
//単一の実施形態は、かどうかを返し @Override
パブリックブールisSingleton(){
trueに戻り; } 容器に装填CCCオブジェクトを返す// @Override パブリックオブジェクトのgetObject()スロー例外{のSystem.outを。 println( "CCCFactoryBean ..." );新新返す(CCC)を;}タイプを返す// <?> @Override publicクラスをgetObjectType(){CCC.classを返します;}}
パブリッククラスのMyConfig {
@Bean
公共CCCFactoryBean cccFactoryBean(){
新しい戻り)(CCCFactoryBeanします。
}
}
公共の静的な無効メイン(文字列[]引数){
AnnotationConfigApplicationContextコンテキスト=新しいAnnotationConfigApplicationContext(MyConfig.class )。
文字列[] beanDefinitionNamesの=のcontext.getBeanDefinitionNames()。
用(文字列ビーン:beanDefinitionNames) { のSystem.out.println(豆)。 } AAA豆= context.getBean(AAA.class )。 System.out.println(豆)。 オブジェクトcCCFactoryBean = context.getBean( "cccFactoryBean" )。System.out.println(cCCFactoryBean)。オブジェクトcCCFactoryBean1 = context.getBean( "&cccFactoryBean" )。System.out.println(cCCFactoryBean1)。}
業績