描述
使用GenericApplicationContext类的registerBean方法可以在项目运行时注入一个bean,获取GenericApplicationContext可以继承ApplicationContextAware,重写setApplicationContext,里面的参数就是ApplicationContext。
继承ApplicationContextAware
            
            
              java
              
              
            
          
          @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();
    }
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }
}
        BeanData
            
            
              java
              
              
            
          
          @Component
public class BeanData {
    public String getName() {
        return "BeanData";
    }
}
        ExampleBean
测试@Autowrite是否生效。
            
            
              java
              
              
            
          
          public class ExampleBean {
    private String name;
	
    @Autowired
    private BeanData beanData;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public BeanData getBeanData() {
        return beanData;
    }
}