ばね豆ソースインターフェース記載分析の認識

春バージョン5.0.11

認識は、ソースの春に様々なシーンでのコールバックオペレーションを完了するために使用される多くのサブインターフェースがあり、すなわち界面スーパーマーク任意のインタフェースを定義していない方法である多くのサブインターフェースを有します。

意識文字通り翻訳ノウハウ、知覚、それは前の意識の意味の全ての感覚として理解されています。

beanNameAwareインターフェイス(推奨されません):あなたは、Bean自体内のBeanのid属性の設定ファイルにアクセスする必要がある場合は、Beanクラスの初期化メソッドは、自分自身を取得するためにコールバック自身の能力を提供する前に、依存関係を決定した後、このインタフェースを実装することにより、豆のid属性は、インターフェースは(文字列名)メソッドの実装では、メソッドのnameパラメータは、Beanのid属性であることに留意すべきである、ボイドsetBeanNameを提供し、プラス豆ゲットする彼らのid属性、これを行うためにsetBeanNameの方法を調整します春のBeanがBean名と連絡先は非常に深いないと思うので、フレームワークコードの春のインターフェイスのより多くの使用は、実際の開発環境は、推奨すべきではありません。

BeanFactoryAwareインターフェース:実装豆BeanFactoryAwareインタフェースは容器たBeanFactoryスプリング、Beanがコンテナの後に作成されるとき、対応する参照たBeanFactoryの例があるから直接アクセスすることができ、インターフェースはメソッドボイドsetBeanFactory(たBeanFactoryたBeanFactory)メソッドを有しますBeanFactoryAwareインタフェースを実現するために、それたBeanFactoryインスタンスこのメソッドの引数で作成された、あなたは豆Springコンテナを許可するアクセスする能力を持っています。短所:原因コードAPIバネは互いに結合され、この方法は推奨されません。

ApplicationContextAwareインタフェース:Beanクラスが初期化された後、ApplicationContextの例を注入され、インターフェースはメソッドを有し、setApplicationContext(ApplicationContextのコンテキスト)は、コンテキスト・インスタンスを作成するために使用されるパラメータは、その欠点をのApplicationContext:APIに結合された原因コードスプリング一緒に、このアプローチは推奨されません。

MessageSourceAwareインタフェース:Beanがメッセージソースで得ることができます。

ApplicationEventPublisherAwareインターフェース:それは豆のアプリケーションコンテキストイベントをパブリッシュできるイベントパブリッシャ豆の文脈で適用することができます。

ResourceLoaderAware接続:豆ResourceLoader外部負荷がBeanでリソースResourceLoader対応するリソースを使用してその結果を得ることができます。

 

 

 ソースAwareのインタフェース

/ ** 
 *ビーンにより通知の対象であることを示すAマーカースーパ
 コールバックスタイルの方法を介して特定のフレームワークオブジェクトの* Springコンテナ。
 *実際のメソッドのシグネチャは、個々のサブインターフェイスによって決定されるがなければならない
 *、典型的には、単一の引数を受け入れだけつの空隙を返す方法で構成されています。
 * 
 *単に実施{<P>注@link アウェア}はデフォルトの機能を提供しません。
 *むしろ、処理は、例えば、明示的に行わなければならない
 * { @link org.springframework.beans.factory.config.BeanPostProcessor}。
 * {を参照して@linkorg.springframework.context.support.ApplicationContextAwareProcessor} 
 *特定の処理の{例えば@code *認識}インターフェースコールバック。
 * 
 * @author クリス梁
 * @author ユルゲンHoeller 
 * @since 3.1
  * / 
パブリック インターフェイスアウェア{ 

}

ソースコード解析からから転送されるのを意識インターフェースの原則を達成するために:

文脈からリフレッシュ開始、prepareBeanFactory方法はApplicationContextAwareProcessorポストプロセッサを追加します

 

 

 

Beanが初期化される前に、このメソッドをトリガーGetBean、postProcessBeforeInitialization方法は、すべてのBeanのポストプロセッサがトリガされます。

 

 

 ApplicationContextAwareProcessorポストプロセッサpostProcessBeforeInitializationメソッドを追加する前にトリガされます

 

 

 豆実装インタフェース場合、それは、対応するメソッドが呼び出されるです、ないBeanNameAwareインターフェイスとインターフェイスBeanFactoryAware

 

 

 AbstractAutowireCapableBeanFactory类的initializeBean方法会调用invokeAwareMethods(beanName, bean)方法

 

 

 

 

 

 以BeanNameAware做个测试:

User1实现了BeanNameAware接口,User没有

public class User {
    private String id;
    private String name;
    private int age;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
public class User1 implements BeanNameAware {
    private String id;
    private String name;
    private int age;
    @Override
    public void setBeanName(String s) {
        id=s;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User1{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

注入

@Configuration
public class TestConfiguration {
    @Bean
    public User user(){
        User user = new User();
        user.setName("zhangsan");
        user.setAge(23);
        return user;
    }
    @Bean
    public User1 user1(){
        User1 user1=new User1();
        user1.setName("lisi");
        user1.setAge(24);
        return user1;
    }
}

测试:

    @Test
    public void test5(){
        AnnotationConfigApplicationContext applicationContext=new AnnotationConfigApplicationContext(TestConfiguration.class);
        User user = applicationContext.getBean(User.class);
        System.out.println(user);
        User1 user1 = applicationContext.getBean(User1.class);
        System.out.println(user1);
    }

得到打印结果:User没有获取到id属性

2020-01-22 15:21:36.079  INFO 9504 --- [           main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@13dab28: startup date [Wed Jan 22 15:21:36 CST 2020]; root of context hierarchy
User{id='null', name='zhangsan', age=23}
User1{id='user1', name='lisi', age=24}
2020-01-22 15:21:36.107  INFO 9504 --- [       Thread-2] o.s.w.c.s.GenericWebApplicationContext   : Closing org.springframework.web.context.support.GenericWebApplicationContext@1485fda: startup date [Wed Jan 22 15:21:33 CST 2020]; root of context hierarchy

おすすめ

転載: www.cnblogs.com/mufeng07/p/12228687.html