いくつかの方法で、コンテナへの注入スプリングアセンブリ

ディレクトリ

环境搭建
<! - https://mvnrepository.com/artifact/org.springframework/spring-context - >
<依存>
<groupIdを> org.springframework </ groupIdを>
<たartifactId>春・コンテキスト</たartifactId>
<バージョン> 5.1.5.RELEASE </バージョン>
</依存関係>

アセンブリの容器注入する春BR /> 1.スキャン+コンポーネントパッケージラベルのアノテーション(@コントローラー/ @サービス/ @リポジトリ/ @コンポーネント)は、独自のコンポーネント(デフォルトIDクラス名の最初の文字を小文字)の書き込みにクラスに参加するために適用される
こののを比較的簡単な方法は、コードを入れていないだろう

[内部のコンポーネントにサードパーティ製のパッケージ] 2 @ビーン(ノートこの設定@Configurationクラスに追加しなければならない)
// @Scope範囲を指定する
//プロトタイプ:マルチインスタンス:IOCコンテナがアップして行くことはありませんし、コンテナ内のオブジェクトを作成するメソッドを呼び出します。
//メソッドは、オブジェクトを作成するために呼び出されるたびに取得;
//シングルトン:単一インスタンス(デフォルト値):IOCコンテナは、IOCのコンテナにオブジェクトを作成するために、startメソッドを呼び出します。
//はそれぞれ取得した後、容器(map.get())から直接取ることである
//リクエスト:リクエスト同じ時間インスタンス作成
//セッション:インスタンスを作成するために同じセッション
BR /> @スコープ(「プロトタイプ 」)
@Lazy //デフォルトの遅延ロードスプリングは、オブジェクトがされるまでに作成されていない場合、このコメントはのみ使用された後、あなたは、コンテナを作成するときにオブジェクトを作成していないオブジェクトに加えて、コンテナの作成を開始する時間です
ビーンに登録@Bean //容器;タイプ戻り値の型で、IDがデフォルトメソッド名ID番号@Bean(「XXXX」)として指定することができる
公共のTest1 test1Bbaen(){
;戻り新しい新規のTest1()
BR />}
[迅速にインポート@容器3に導入成分]
@Configuration
BR /> @ ComponentScan( "com.tjx")
@import({Test1.classに、Test1Mapper。

======================================== //
// 1.あなたは自分にしたい場合インポート・コンポーネントに定義された論理戻り、実装ImportSelectorインターフェース、またはインターフェースImportBeanDefinitionRegistrarことクラスを作成することができ、このクラスを使用してノートImportSelector方式は@importをインポートする必要があり、なしが存在するであろうように、直接容器に添加し、このクラス@Componentを使用しません効果は、ImportSelector実装クラス自体をインポートします

次のBR /> @設定
@ComponentScan( "com.tjx")
@import({Test1.classに、Test1Mapper.class、MyImportSelector.class、MyImportBeanDefinitionRegistrar.class})//クラスIDのデフォルトの完全なクラス名
publicクラスMainConfig {

================================
パブリッククラスMyImportSelector実装ImportSelector {

//AnnotationMetadata:当前标注@Import注解的类的所有注解信息
@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
    //返回要导入到容器中的组件全类名
    return new String[]{"com.tjx.service.Test1Service","xxxxxxxxxx"};
}

}

パブリッククラスMyImportBeanDefinitionRegistrar実装ImportBeanDefinitionRegistrar {

/**
 * AnnotationMetadata:当前类的注解信息
 * BeanDefinitionRegistry:BeanDefinition注册类;
 *      把所有需要添加到容器中的bean;调用
 *      BeanDefinitionRegistry.registerBeanDefinition手工注册进来
 */
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {

    boolean definition = registry.containsBeanDefinition("com.atguigu.bean.Red");
    boolean definition2 = registry.containsBeanDefinition("com.atguigu.bean.Blue");
    if(definition && definition2){
        //指定Bean定义信息;(Bean的类型,Bean。。。)
        RootBeanDefinition beanDefinition = new RootBeanDefinition(RainBow.class);
        //注册一个Bean,指定bean名
        registry.registerBeanDefinition("rainBow", beanDefinition);
    }
}

}

4. FactoryBeanの(工場ビーン)春が提供する;
 1)を、デフォルトの工場Beanを取得するためには、呼び出し元のオブジェクトのgetObjectによって作成された
  2)、豆の工場自体を得るために、我々はによって&先行ID与える必要が
applicationContext.getBean(「&colorFactoryBeanにします「);

com.atguigu.beanパッケージ;

輸入org.springframework.beans.factory.FactoryBean;

//春、定義作成FactoryBeanの
パブリッククラスが実装をColorFactoryBean FactoryBeanの<カラー> {

//返回一个Color对象,这个对象会添加到容器中
@Override
public Color getObject() throws Exception {
    // TODO Auto-generated method stub
    System.out.println("ColorFactoryBean...getObject...");
    return new Color();
}

@Override
public Class<?> getObjectType() {
    // TODO Auto-generated method stub
    return Color.class;
}

//是单例?
//true:这个bean是单实例,在容器中保存一份
//false:多实例,每次获取都会创建一个新的bean;
@Override
public boolean isSingleton() {
    // TODO Auto-generated method stub
    return false;
}

} コンフィギュレーションクラス内のBr />
@Bean
公共ColorFactoryBean colorFactoryBean(){
)(新しい新しいColorFactoryBeanを返します;
}

おすすめ

転載: blog.51cto.com/14765930/2481517