「Javaの春のフレームワーク」の拡張スプリングケース(B)

ケース4:

パッケージaccelerate1.LifeCycle; 

インポートorg.springframework.context.SmartLifecycle;
 インポートorg.springframework.stereotype.Component; 

@Component 
パブリック クラス MyLifeCycle 実装SmartLifecycle { 

    ブールのフラグ= falseに; 

    @Override 
    / ** 
     * isAutoStartupの戻り値は、自動的に実行するかどうかを示しますコールバックメソッド、真である。偽号 
     *スプリングデフォルトを手動で実行されるため、ライフサイクル・インターフェースは、手動でも行うことができます。
     * / 
    パブリック ブールisAutoStartup(){
         リターン trueに; 
    } 

    @Override 
    / ** 
     *このメソッドは、stopメソッドのライフサイクルを呼び出すために使用されます
     * /
    公共 ボイドストップ(Runnableをコールバック){ 
        するSystem.out.println( "stopメソッドの実行内容" ); 
        callback.run();    // callback.run手段が直ちに停止する
    } 

    @Override 
    公共 ボイド開始(){ 
        でフラグ = trueに
        System.out.println(「コンテンツの方法を実行開始」); 
    } 

    @Override 
    公共 ボイドSTOP(){ 
    } 

    @Override 
    / ** 
     *場合メソッドが戻るときに方法を開始する偽isRunningが呼び出され
     isRunningとき*メソッドが値を返します真の呼び出しは、メソッドを停止するとき
     * / 
    パブリック ブール(){isRunning
         復帰フラグにし; 
    } 

    @Override 
    / ** 
     *ライフサイクルは、優先度を実行するために設けられた:小さい値より高い優先順位を。
     * / 
    パブリック INT getPhase(){
         戻り 0 ; 
    } 
}
パッケージ; accelerate1.test 

インポートaccelerate1.app.AppConfig;
 インポートorg.springframework.context.annotation.AnnotationConfigApplicationContext、

パブリック クラスDEMO1 {
     公共 静的 ボイドメイン(文字列[]引数){ 
        AnnotationConfigApplicationContext AnnotationConfigApplicationContext =
                 新しい新しい AnnotationConfigApplicationContext(のAppConfig。クラス);
         / ** これはテストですので、メインスレッドが停止にアプリケーションを終了し、方法を聞いて停止しません。
         * Webプロジェクトは、Tomcat Webコンテナおよび他の方法が停止するコールバックすることができ、停止しました。
         * * / 
        AnnotationConfigApplicationContext.stop();  
    }
}

業績:

ケース5:

パッケージaccelerate1.FactoryBeanを。

パブリック クラスビング{
     パブリックビング(){ 
        System.out.printlnは( "-----ビング-------" )。
    } 
}
パッケージaccelerate1.FactoryBeanを。

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

@Component 
パブリック クラス MyFactoryBean 実装FactoryBeanの{ 
    @Override 
    パブリックオブジェクトのgetObject()がスロー例外{
         戻り 新しいビングを()。
    } 

    @Override 
    公共 <?>クラスgetObjectType(){
         戻り ヌル
    } 
}
パッケージaccelerate1.test; 

輸入accelerate1.app.AppConfig;
輸入org.springframework.context.annotation.AnnotationConfigApplicationContext; 

パブリック クラスDEMO1 {
     公共 静的 ボイドメイン(文字列[]引数){ 
        AnnotationConfigApplicationContext annotationConfigApplicationContext =
                 新しい AnnotationConfigApplicationContext(のAppConfig。クラス)。
        System.out.println(annotationConfigApplicationContext.getBean( "myFactoryBean" )); 
    } 
}

業績:

春の春は、第三者がケースは、そのうちの一つである3つの方法がありますオブジェクトを管理します。

1. @Beanコメント。

2.のSpring Beanのうちに戻る必要がありますFactoryBeanのインタフェースのgetObjectメソッドを実装します。

3. AnnotationConfigApplicationContextは、APIを通じて達成しました。以下のコードをスキャンする前にパケットを追加しました。

。annotationConfigApplicationContext.getBeanFactory()registerSingleton( "ビング"、ビング());

ケース6:

パッケージaccelerate1.ann; 

輸入java.lang.annotation.ElementType;
輸入java.lang.annotation.Retention。
輸入java.lang.annotation.RetentionPolicy;
輸入java.lang.annotation.Target; 

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
パブリック @ インタフェースAcceleate { 
}
パッケージaccelerate1.FactoryBeanを。

輸入accelerate1.ann.Acceleate。

@Acceleate 
パブリック クラスビング{
     パブリックビング(){ 
        System.out.printlnは( "-----ビング-------" )。
    } 
}
パッケージaccelerate1.scanner。

輸入org.springframework.beans.factory.support.BeanDefinitionRegistry;
輸入org.springframework.context.annotation.ClassPathBeanDefinitionScanner;
輸入org.springframework.core.type.filter.TypeFilter; 

パブリック クラス MyScannerは延びClassPathBeanDefinitionScanner { 

    公共MyScanner(BeanDefinitionRegistryレジストリ){
         スーパー(レジストリ)。
    } 

    @Override 
    公共 ボイドaddIncludeFilter(のtypeFilter includeFilter){
         スーパー.addIncludeFilter(includeFilter)。
    } 

}
パッケージaccelerate1.test; 

輸入accelerate1.FactoryBean.Bing。
輸入accelerate1.ann.Acceleate。
輸入accelerate1.app.AppConfig;
輸入accelerate1.scanner.MyScanner。
輸入org.springframework.context.annotation.AnnotationConfigApplicationContext;
輸入org.springframework.core.type.filter.AnnotationTypeFilter; 

パブリック クラスDemo3 {
     公共 静的 ボイドメイン(文字列[]引数){ 
        AnnotationConfigApplicationContext annotationConfigApplicationContext =
                 新しいAnnotationConfigApplicationContext()。
        / ** 
         *春に独自のメモを設定して、あなた自身のメモを追加することができますので、読んで
         自分の春の豆を達成させます*。
         * / 
        MyScanner MyScannerです = 新新MyScanner(AnnotationConfigApplicationContext)である。
        myScanner.addIncludeFilter(新新 AnnotationTypeFilter(Acceleate。クラス)); 
        myScanner.scan( "accelerate1" ); 

        annotationConfigApplicationContext.register(のAppConfigの。クラス); 
        annotationConfigApplicationContext.refresh(); 
        システム。 out.printlnを(annotationConfigApplicationContext.getBean(ビング。クラス)); 
    } 
}

結果:

オリジナルの説明:上記の作られたものは、中includeFiltersに自分のメモを書くことです。下記に示すように、

おすすめ

転載: www.cnblogs.com/jssj/p/12437289.html