1.获取ApplicationContext ,通过ApplicationContext 可以获取BeanFactory
@Configuration
public class MyConfig implements ApplicationContextAware {
private static ApplicationContext applicationContext=null;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext=applicationContext;
}
public static ApplicationContext getApplicationContext(){
return applicationContext;
}
}
2. 通过DefaultListableBeanFactory注册Bean
@RunWith(SpringRunner.class)
@SpringBootTest
public class DanyTest {
@Test
public void test(){
ConfigurableApplicationContext context = (ConfigurableApplicationContext) MyConfig.getApplicationContext();
//Bean的实例工厂
DefaultListableBeanFactory dbf = (DefaultListableBeanFactory) context.getBeanFactory();
//Bean构建 BeanService.class 要创建的Bean的Class对象
BeanDefinitionBuilder bdb= BeanDefinitionBuilder. genericBeanDefinition(BeanService.class);
//向里面的属性注入值,提供get set方法
bdb.addPropertyValue("msg", "hello ");
//bdb.setParentName(""); 同配置 parent
//bdb.setScope(""); 同配置 scope
//将实例注册spring容器中 bs 等同于 id配置
dbf.registerBeanDefinition("beanService", bdb.getBeanDefinition());
BeanService beanService=(BeanService) context.getBean("beanService");
beanService.say();
}
}
class BeanService {
private String msg;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public void say(){
System.out.println("====="+msg);
}