まず、コメントフォームが注入された豆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 "哈士奇" ); リターン豚。 } }
最後に、異なる注入は、環境設定の豆を変更することによって達成することができます