spring基本使用(4)-Code的方式动态添加BeanDefition以及bean实例到Spring容器当中

1、DefaultListableBeanFactory.registerBeanDefinition
   此函数可动态向容器注册BeanDefinition。
   如下代码:
    classpath:spring-context.xml 中配置:
    <bean id="userDao" class="com.wzy.springstudy.UserDao"/>

    向spring容器中注册bean BeanDefinition 以及获取bean实例代码:
    @Test
    public void testApplicationContext111(){
        ClassPathXmlApplicationContext context =
                new ClassPathXmlApplicationContext("classpath:spring-context.xml");
        DefaultListableBeanFactory beanFactory =
                (DefaultListableBeanFactory)context.getBeanFactory();
        BeanDefinitionBuilder definitionBuilder =
                BeanDefinitionBuilder.genericBeanDefinition(UserService.class);
        definitionBuilder.addPropertyReference("userDao","userDao");
        beanFactory.registerBeanDefinition("userService",definitionBuilder.getRawBeanDefinition());
        UserService bean = context.getBean(UserService.class);
        System.out.println(bean);
    }

2、DefaultListableBeanFactory.registerSingleton
    此函数可动态向容器注册Singleton 的bean 实例。
    如下代码:
     classpath:spring-context.xml 中:
     <bean id="userDao" class="com.wzy.springstudy..UserDao"/>

    向spring容器中注册单实例bean
    @Test
    public void testApplicationContext111(){
        ClassPathXmlApplicationContext context =
                new ClassPathXmlApplicationContext("classpath:spring-context.xml");
        DefaultListableBeanFactory beanFactory =
                (DefaultListableBeanFactory)context.getBeanFactory();
        UserDao userDao = beanFactory.getBean(UserDao.class);
        UserService userService = new UserService();
        userService.setUserDao(userDao);
        beanFactory.registerSingleton("userService", userService);
        UserService bean = context.getBean(UserService.class);
        System.out.println(bean);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值