java第四章案例拓展,Spring Boot(四)Spring4扩展分析(二)

1.对容器进行初始化的回调 , BeanFactoryPostProcessor接口

创建一个类 MyBeanFactoryPostProcessor.java 实现 BeanFactoryPostProcessor接口 ,加 @Component 注解 ,注入到Spring容器

@Component

public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {

@Override

public void postProcessBeanFactory(ConfigurableListableBeanFactory arg0) throws BeansException {

System.out.println(“—-“+arg0.getBeanDefinitionCount());

}

}

2.在 postProcessBeanFactory 方法 进行 对容器进行初始化的回调

3.在Spring容器 初始化之后 触发 ,而且只执行 一次。

触发时机 比 BeanPostProcessor 早。

2.动态地往Spring容器里 注入Bean , BeanDefinitionRegistryPostProcessor 接口里, 拿到 BeanDefinitionRegistry 对象

1.创建一个类 MyBeanDefinitionRegistryPostProcessor.java 实现 BeanDefinitionRegistryPostProcessor

public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {

@Override

public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {

// TODO Auto-generated method stub

}

@Override

public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {

// TODO Auto-generated method stub

}

}

2.在 postProcessBeanDefinitionRegistry 方法里, 拿到 BeanDefinitionRegistry 对象, 进行 Bean的动态注入

@Override

public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {

// 模拟 注入10个User Bean

for(int i=0;i<10;i++){

BeanDefinitionBuilder bdb=BeanDefinitionBuilder.rootBeanDefinition(User.class); // 参数 :Bean的定义是 基于那个对象的

bdb.addPropertyValue(“name”, “u”+i); // 注入属性

registry.registerBeanDefinition(“User”+i, bdb.getBeanDefinition()); // 参数1:注入的Bean 的名字,名字不能重复;参数2:得到Bean的定义

}

}

3.在 应用文件App.java 里 显示

context.getBeansOfType(User.class).values().forEach(System.out::println);

4.也可以直接在 应用文件App.java 里 ,动态地定义 一个Bean

context.registerBeanDefinition(beanName, beanDefinition);

5.BeanDefinitionRegistryPostProcessor 拿到 ConfigurableListableBeanFactory ,BeanDefinitionRegistry 2个对象。

BeanDefinitionRegistry 可以动态地注入Bean

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值