三つの方法で使用される春の@import注釈付きノート

@

1、@インポートノートノート

。1、@importは唯一のクラスで 、インポート@ IOC容器に添加したばねの迅速な導入の実施例により達成しました

 

多くの方法がありますインポートは相対的に非常に革を指摘し、@、IOCのコンテナに参加する2、@import注釈は、サードパーティ製のパッケージをインポートするために使用することができ 、もちろん@Bean注釈ができますが、@importノートは迅速に、より便利にインポートする方法

 


3、インポート・ノート@ 3つの用法があります

3つの用途のインポート@ 2、

三つの用途は含まれ@import:

クラスのアレイ埋める1、直接的な方法
2、ImportSelectorの方法を【フォーカス】
3、ImportBeanDefinitionRegistrar方法

2.1、最初の使用:直接クラスの配列を埋めます

直接充填アレイ対応するクラス、クラス0は、複数のアレイを有することができます。

構文は次のとおりです。

@Import({ 类名.class , 类名.class... })
public class TestDemo {

}

対応するインポートがスプリングビーン・コンテナに追加される、容器内のBeanクラス名は、であり、完全なクラス名 、クラス名例えばcom.yc.

2.2、第2の使用:ImportSelectorの方法[強調]

私はこの方法を使用する場合は、次のように、このアプローチの前提は、クラスがインタフェースImportSelectorを実装することで、ターゲット・オブジェクトは、このクラスの分析MyClassのです。

MyClassのクラスを作成し、インターフェイスを実装ImportSelector

public class Myclass implements ImportSelector {
//既然是接口肯定要实现这个接口的方法
    @Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
        return new String[0];
    }
}

分析selectImportsインターフェイスメソッドの実装の:

  • 1、戻り値:私たちは実際にコンテナ完全なクラス名にコンポーネントをインポートしたい[ フォーカス ]
  • 2、パラメーター:AnnotationMetadata []は小数点ではないすべての情報を標識するために現在@import注釈付きノートを表します

selectImportsメソッドは空の配列を返しますが、nullを返すことはできません、それ以外の場合は、NULLポインタ例外が報告されることに注意してください!

上記の分析が完了した後、次のステップの特定の使用:

ステップ1:MyClassのクラスを作成し、完全なクラス名を示すために、ここで使用されているImportSelectorインターフェイスを実装するには、戻り値に加算されます

public class Myclass implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
        return new String[]{"com.yc.Test.TestDemo3"};
    }
}

ステップ2:書き込みTestDemoクラス、およびImportSelector MyClassのクラスを使用する方法をマーク

@Import({TestDemo2.class,Myclass.class})
public class TestDemo {
        @Bean
        public AccountDao2 accountDao2(){
            return new AccountDao2();
        }

}

図から分かるようにノートを参照することができ@Bean靴の非常に明確でない場合は、伊春は故意に、カメオの役割@Beanノートを選んだ@Beanコメントの春を説明するために方言

第三段階:コンポーネントクラスコンテナを印刷テストの準備

/**
 * 打印容器中的组件测试
 */
public class AnnotationTestDemo {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext applicationContext=new AnnotationConfigApplicationContext(TestDemo.class);  //这里的参数代表要做操作的类

        String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
        for (String name : beanDefinitionNames){
            System.out.println(name);
        }

    }
}

ステップ4:実行結果
ここに画像を挿入説明

2.3、第三用法:ImportBeanDefinitionRegistrar方法

また、第二ImportSelector使用量、80%の類似性界面類似しているが、次のように、この使用法は、比較的カスタム登録です。

ステップ1:Myclass2クラスを作成し、インターフェイスを実装ImportBeanDefinitionRegistrar

public class Myclass2 implements ImportBeanDefinitionRegistrar {
//该实现方法默认为空
    @Override
    public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {
      
    }
}

パラメトリック解析:

  • 第一引数:annotationMetadataとパラメータはImportSelector情報前と同じですが、すべてのノートが現在@importコメントにマークされていることを示しています
  • 第2のパラメータは、レジスタがビーンを定義示し

ステップ2:コードを書いて、カスタム登録豆

public class Myclass2 implements ImportBeanDefinitionRegistrar {
    @Override
    public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {
        //指定bean定义信息(包括bean的类型、作用域...)
        RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(TestDemo4.class);
        //注册一个bean指定bean名字(id)
        beanDefinitionRegistry.registerBeanDefinition("TestDemo4444",rootBeanDefinition);
    }
}

ステップ3:書き込みTestDemoクラス、および使用ImportBeanDefinitionRegistrar途中Myclass2クラスにマーク

@Import({TestDemo2.class,Myclass.class,Myclass2.class})
public class TestDemo {

        @Bean
        public AccountDao2 accountDao222(){
            return new AccountDao2();
        }

}

ステップ4:実行結果
ここに画像を挿入説明

インポート注釈付きサマリ@ 3、3つの異なる方法

:の最初の使用@Import(インポートする容器{成分}):コンポーネントコンテナが自動的に登録され、IDがデフォルトの完全修飾クラス名であります

 

第2の使用:ImportSelector:クラスの配列全体、特に多数[有するspringboot底インポートするコンポーネントの名前を返し強調 ]

 

第三の使用:ImportBeanDefinitionRegistrar手動ビーンコンテナを登録します

@import特に注意でJieke利用ミックスこれらの3つの方法が第一および第二の方法の完全なクラス名で登録され、そして第三には、方法をカスタマイズすることができます。

特にここでマスタに特にspringbootに用いられる第2利用ImportSelector方法の特に多数使用される多くのspringbootで@import注釈自体、!

この記事へのあなたの助けの少しがある場合、〜、聖歌賞賛を指してあなたに感謝して下さい

最後に、そこに不足しているか正しくない場合、感謝し、正しい私の批判をしてください!ご質問がある場合は、返信する絶対初めてメッセージを残してください!

私はいくつかのJava学習教材との大きな波があり、あなたが公共の数に集中することを歓迎するJavaの電子書籍など周志明教師の深さJava仮想マシン、Javaプログラミングのアイデア、コア技術のボリューム、西方のデザインパターン、Javaの並行プログラミングの戦闘など、... ...聖書は、Tomcat上で速い車を言っていないのjava、行くがたです!主なものは、技術、憧れ技術、技術の追求を探ることである、良いポットの友人は、ああ来ていると述べました...

ここに画像を挿入説明

おすすめ

転載: www.cnblogs.com/yichunguo/p/12122598.html