SpringBoot运行时注入一个Bean
描述
使用GenericApplicationContext类的registerBean方法可以在项目运行时注入一个bean,获取GenericApplicationContext可以继承ApplicationContextAware,重写setApplicationContext,里面的参数就是ApplicationContext。
继承ApplicationContextAware
@RestController
@RequestMapping("/register/bean")
public class RegisterBeanController implements ApplicationContextAware {private ApplicationContext applicationContext;// AnnotationConfigServletWebServerApplicationContext@GetMapping("/example")public String registerBean() {GenericApplicationContext genericApplicationContext = (GenericApplicationContext) this.applicationContext;// ExampleBean没有使用任何的Component注解。genericApplicationContext.registerBean("ExampleBean", ExampleBean.class);ExampleBean exampleBean = (ExampleBean) applicationContext.getBean("ExampleBean");return exampleBean.getBeanData().getName();}@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {this.applicationContext = applicationContext;}
}
BeanData
@Component
public class BeanData {public String getName() {return "BeanData";}
}
ExampleBean
测试@Autowrite是否生效。
public class ExampleBean {private String name;@Autowiredprivate BeanData beanData;public String getName() {return name;}public void setName(String name) {this.name = name;}public BeanData getBeanData() {return beanData;}
}