春のコンテナコンポーネントのためにサインアップ

/ ** 
     ; *容器アセンブリに登録
     * 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)。}

業績

 

おすすめ

転載: www.cnblogs.com/mingyuan1031/p/11302274.html