MyControllerカスタム注釈:
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented 公共@interface MyController { 文字列MUV()デフォルト""。 }
初期化がUserServcie注入しました:
@Service(値= "そのUserServiceの") パブリッククラスUserServiceの{ パブリック文字列doService(文字列CO'S){ リターン( "春--- I ---注入行うサービス方法"); } }
でカスタム注釈バッチ動的噴射MyController1,2によると:
@MyController パブリッククラスMyController1 { パブリック文字列getRes(){ リターン"(Iは動的に注入" + this.getClass()のgetName()+ ")"; } }
ダイナミック注射しUserControllerで:
UserControllerで{クラス公開 ; UserServiceのプライベートUserServiceの //パブリックUserServiceのgetUserService(){ ことUserServiceのを返す; // //} / ** *これは必要である * @paramのUserServiceのは、 * / 公共ボイドsetUserService(UserServiceのUserServiceの){ this.userService =そのUserServiceの; } パブリック文字列toAction(文字列のコンテンツ){ するSystem.out.println( "I UserControllerでtoAction方法が動的登録され、最初の注入方法userService.doServiceを呼び出す開始"); 文字列userService.doService RES =(コンテンツ)。 myController1 myController1 =(myController1)SpringContextUtil.getBean( MyController1.class)。 MyController2 myController2 =(MyController2)SpringContextUtil.getBean(MyController2.class)。 )(+ myController2.getRes)(RES +コンテンツ+ myController1.getResを返します。 } }
主な機能をspringboot:
@SpringBootApplication パブリッククラスDemoSpringbootApplication { パブリック静的無効メイン(文字列[] args){ のApplicationContextのApplicationContext = SpringApplication.run(DemoSpringbootApplication.class、引数)。 SpringContextUtil.setApplicationContext(ApplicationContextの)。 //将のApplicationContext转换为ConfigurableApplicationContext ConfigurableApplicationContext configurableApplicationContext =(ConfigurableApplicationContext)SpringContextUtil.getApplicationContext(); DefaultListableBeanFactory defaultListableBeanFactory =(DefaultListableBeanFactory)configurableApplicationContext.getBeanFactory(); //通过BeanDefinitionBuilder创建豆定义 BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(UserController.class)。 //設定されたプロパティUserServiceの、[必要]は、豆に定義されている。この属性参照セッターを持っている:UserServiceの、ここUserServiceの春のコンテナが管理されていますが。 BeanDefinitionBuilder.addPropertyReference( "UserServiceの" 、 "UserServiceの"); //登録豆 defaultListableBeanFactory.registerBeanDefinition( "UserControllerで"、beanDefinitionBuilder.getRawBeanDefinition()); System.out.printlnは() "カスタム注釈MyControllerに応じて動的噴射を開始"; セット<クラス<>>? ClassUtil.getClassesController = SET(); のSystem.out.println( "合計" + set.size()+ "クラスはカスタム注釈を満たす"); (Clでクラス<?>:SET)についての{ BeanDefinitionBuilder beanDefinitionBuilderAno = BeanDefinitionBuilder。genericBeanDefinition(CL)。 defaultListableBeanFactory.registerBeanDefinition(cl.getName()、beanDefinitionBuilderAno.getRawBeanDefinition())。 System.out.println( "成功した注入" + cl.getName()); } UserControllerでUserControllerで=(UserControllerで)SpringContextUtil.getBean( "UserControllerで")。 文字列RES = userController.toAction( "入参")。 System.out.println(RES)。 } }
パッケージ、クラススキャン、カスタム注釈、参照を横断:
すべてのクラス注釈付きメソッドのJavaパッケージトラバーサル
参考: