

MyController自定義注解:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyController {
String muv() default "";
}
初始化注入的UserServcie:
@Service(value = "userService")
public class UserService {
public String doService(String co) {
return ("---我是spring注入的do service方法---");
}
}
根據自定義注解批量動態注入的MyController1,2同:
@MyController
public class MyController1 {
public String getRes() {
return "(我是被動態注入的"+this.getClass().getName()+")";
}
}
動態注入的UserController:
public class UserController {
private UserService userService;
// public UserService getUserService() {
// return userService;
// }
/**
* 這個是必須的
* @param userService
*/
public void setUserService(UserService userService) {
this.userService = userService;
}
public String toAction(String content){
System.out.println("我是動態注冊的UserController的toAction方法,開始調用初始注入的userService.doService方法");
String res = userService.doService(content);
MyController1 myController1 = (MyController1)SpringContextUtil.getBean(MyController1.class);
MyController2 myController2 = (MyController2)SpringContextUtil.getBean(MyController2.class);
return res + content + myController1.getRes() + myController2.getRes();
}
}
springboot主函數:
@SpringBootApplication
public class DemoSpringbootApplication {
public static void main(String[] args) {
ApplicationContext applicationContext = SpringApplication.run(DemoSpringbootApplication.class, args);
SpringContextUtil.setApplicationContext(applicationContext);
//將applicationContext轉換為ConfigurableApplicationContext
ConfigurableApplicationContext configurableApplicationContext = (ConfigurableApplicationContext) SpringContextUtil.getApplicationContext();
DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) configurableApplicationContext.getBeanFactory();
// 通過BeanDefinitionBuilder創建bean定義
BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(UserController.class);
// 設置屬性userService,【必須有setter】,此屬性引用已經定義的bean:userService,這里userService已經被spring容器管理了.
beanDefinitionBuilder.addPropertyReference("userService", "userService");
// 注冊bean
defaultListableBeanFactory.registerBeanDefinition("userController", beanDefinitionBuilder.getRawBeanDefinition());
System.out.println("開始根據自定義注解MyController動態注入");
Set<Class<?>> set = ClassUtil.getClassesController();
System.out.println("共 " + set.size() + "個類符合自定義注解");
for(Class<?> cl : set) {
BeanDefinitionBuilder beanDefinitionBuilderAno = BeanDefinitionBuilder.genericBeanDefinition(cl);
defaultListableBeanFactory.registerBeanDefinition(cl.getName(), beanDefinitionBuilderAno.getRawBeanDefinition());
System.out.println("注入成功 " + cl.getName());
}
UserController userController = (UserController) SpringContextUtil.getBean("userController");
String res = userController.toAction("入參");
System.out.println(res);
}
}

遍歷包,掃描自定義注解的類,參考:
參考:
