动态注册Bean

 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);
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值