注釈ベースの春

まず、コメントフォームが注入された豆IOCコンテナ

  1.1は、次のような構成のクラスを、持っている必要があります。

@Configuration 
パブリッククラスのMyConfig { 

    @Bean //即ID = "myPig" 
    パブリックブタmyPig(){ 
        豚豚=新しい豚( "佩奇"、4 "哈士奇")。
        豚を返します。
    } 
}

  三の成分および三の成分に非分割の形で1.2、

  注釈3つのコンポーネント:制御層:@Controller

          サービス層:@Service

          ダオ層:@Respository 3が用意されています@Component

    モードプロファイル:. <コンテキスト:コンポーネント・スキャンベースパッケージ=「XXX」>ここで、IOCコンテナに注釈パケットをスキャン

                    。Bメモの方法:

@Configuration 
@ComponentScan(値 = "サービス" パブリック クラスのMyConfig { 

    @Bean     // 即ID = "myPig" 
    パブリックブタmyPig(){ 
        豚豚 = 新しい豚( "佩奇"、4 "哈士奇" )。
        リターン豚。
    } 
}

    メモの通り様々なパラメータは、このコラムのデモでは、ソースコードを参照してください

// スキャンこのパッケージのコントローラが、の@Serviceについては、このパッケージコメント除外 
@ComponentScan(値=「コントローラ」、excludeFilters = {@ ComponentScan.Filter(タイプの= FilterType.ANNOTATION、値=サービス。クラス)})
//スキャンのみStudentServiceこのクラス、注意を有効にするデフォルトのスキャンオフにする必要があります
@ComponentScan(@ ComponentScan.Filter(タイプ= FilterType.ASSIGNABLE_TYPE 、値= {StudentService.class})}、useDefaultFilters =偽)を

   非レイヤーアセンブリ(例えば、コンバータコンバータ):

    図1に示すように、また、豆+戻り値は、メソッド名にIDのデフォルト@使用することができます

      インポートモード@ 2、

    3、FactoryBeanの

  最初のアプローチは、最初に実証され、したがって@importから開始されました:

@Configuration 
@import({コース,. クラス、CollectionTypeは。クラス})       // IDは完全修飾クラス名であります
パブリック クラスのMyConfig { 
     ...          
}

  {リンクImportSelector @}、{リンクImportBeanDefinitionRegistrar @}:@importソースは、2つの他の実装を述べ

  FactoryBeanの:

パブリック クラス MyFactoryBean 実装 FactoryBeanの<先生> { 

    @Override 
    公共教師GetObjectが()スロー例外{
         // TODO自動生成方法スタブ
        戻り 新しい教師を();   // 放入对象
    } 

    @Override 
    パブリッククラス<先生> getObjectType(){
         // TODO自動生成方法スタブ
        戻り教師。クラス// 放入对象类型
    } 

    @Override 
    パブリック ブールisSingleton(){
        // TODO自動生成されたメソッドスタブ
        リターン trueに ;    // 決定シングルトン
    } 

} 



@Configuration 
パブリック クラスのMyConfig { 
    @Bean     // ID =メソッド名
    パブリック FactoryBeanの<先生> myFactoryBean(){
         戻り 新しい新)(MyFactoryBeanを; 
    } 
}

  この方法で豆を取得します。  

    @Test
     公共 ボイド工場(){ 
        オブジェクトbean1 = context.getBean( "&myFactoryBean" )。      //得到MyFactoryBean 
        オブジェクトbean2 = context.getBean( "myFactoryBean" );    //得到教師 
        のSystem.out.println(bean1 + "\ n" + bean2)。
    } 

config.MyFactoryBean@1a052a00 
entity.Teacher@4d826d77

 

第二に、注入条件豆の形で提供ノート

  2.1、条件クラスの作成

パブリック クラス CourseCondition 実装条件条件{のために

    @Override 
    パブリック ブールマッチ(ConditionContextコンテキスト、AnnotatedTypeMetadataメタデータ){ 
        環境環境 = Context.getEnvironment();     //環境ゲット 
        文字列pigType = environment.getProperty( "pig.type" ;)
         IF(pigTypeを。 (「古い」))が含ま{      // 条件をその実装クラスブタ
            リターン 真へ; 
        } 
        戻り falseに ;                // 真Beanには、IOC容器に加え、容器に対しIOCの添加なし
    } 

}

  2.2、豚のインタフェースと実装クラスを作成します

パブリック インターフェースブタ{ 

    ボイドsyso(); 
} 

パブリック クラス OldPig 実装ブタ{...}

  2.3、コンフィギュレーション・クラスのアノテーションの増加@Conditional

@Configuration
 パブリック クラスのMyConfig { 
    @Bean( "oldPig")     // 即ID = "myPig" 
    @Conditional(CourseCondition。クラスパブリックOldPig myPig(){ 
        OldPigブタ = 新しい OldPig( "佩奇"、4 "哈士奇" );
        リターン豚。
    } 
}

  最後に、異なる注入は、環境設定の豆を変更することによって達成することができます

おすすめ

転載: www.cnblogs.com/709539062rao/p/12616844.html