スレッドには、注釈に春の豆を取得するための直接的な方法を使用していますが、多くの場合、ビジネスプロセスを実現するために豆のスレッドを使用する必要はありません。2つの方法があります
方法1:豆のスレッドに割り当てられ、プライベートプロパティで設定された実装クラスの方法を通じてスレッドを初期化します実装クラス。
方法2:ApplicationContextのビーンのスレッドから直接取得しました。
輸入java.util.concurrent.ExecutionException。 輸入java.util.concurrent.ExecutorService。 輸入java.util.concurrent.Executors。 輸入org.junit.Test; 輸入org.junit.runner.RunWith; 輸入org.springframework.beans.factory.annotation.Autowired; 輸入org.springframework.boot.test.context.SpringBootTest; 輸入org.springframework.test.context.junit4.SpringRunner。 輸入com.polymer.app.StartApplication。 輸入com.polymer.app.service.MockService。 輸入com.polymer.app.utils.ApplicationContextHandle。 @RunWith(SpringRunner。クラス) @SpringBootTest(クラス =てstartApplication。クラス) パブリック クラスTestThreadAOP { プライベート 静的 ExecutorServiceのexcutor = Executors.newFixedThreadPool(1 )。 @Autowired プライベートMockService mockService。 @Test 公共 ボイド testTAOP()スローInterruptedExceptionある、ExecutionException { タスクT = 新しいタスク(); t.setName( "zhangyf" ); t.setMockService(mockService)。 excutor.execute(T)。 } クラスタスク実装したRunnable { プライベート文字列名を、 プライベートMockService mockService。 公共MockService getMockService(){ 戻りmockServiceと、 } 公共 ボイドsetMockService(MockService mockService){ この .mockService = mockService。 } パブリック文字列のgetName(){ 戻り名。 } 公共 ボイドのsetName(文字列名){ この .nameの= 名前。 } @Override 公共 のボイドRUN(){ // 実施形態のA / * 文字列= mockService.callコール(); System.out.printlnは(コール+名); * / // 第二の方法 のSystem.out.printlnは( "springbeansが開始ゲット---" ); MockServiceモック =(MockService)ApplicationContextHandle.getBean( "mockSeviceImpl" ); System.out.printlnは( "---エンドspringbeansを取得する" ); 文字列を呼び出し = mock.call(); System.out.printlnは(コール + 名前); } } }
輸入org.apache.log4j.Logger。 輸入org.springframework.beans.BeansException。 輸入org.springframework.context.ApplicationContext; 輸入org.springframework.context.ApplicationContextAware。 輸入org.springframework.context.annotation.Configuration。 @設定// springboot的使用のApplicationContext必须要使用此注解、否则不生效 パブリック クラス ApplicationContextHandleが実装ApplicationContextAware { プライベート 静的のApplicationContextのApplicationContextを。 民間 最終 静的ロガーロガー= Logger.getLogger(ApplicationContextHandle。クラス); @Override 公共 ボイド setApplicationContext(ApplicationContextのApplicationContextのは)スローBeansException { ApplicationContextHandle.applicationContext = のApplicationContextを; } / ** *オブジェクトを取得する 主要な役割を果たし、この書き換え方法豆* * @paramの名前を * @return 指定された名前に登録オブジェクト豆の例 * @throws BeansException * / パブリック 静的 getBean(文字列名)オブジェクトをスローBeansException { リターンapplicationContext.getBeanに(名前); } }
ばねは、手動で追加するために従来必要である<ビーンID =「ApplicationContextHandle」クラス=「com.polymer.app.utils.ApplicationContextHandle」/>