配置元信息
BeanDefinition
属性配置元信息
public static void main(String[] args) {
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(Person.class);
builder.addPropertyValue("name", "demo");
AbstractBeanDefinition beanDefinition = builder.getBeanDefinition();
// 附加属性 不影响Bean的实例化,属性赋值,初始化
beanDefinition.setAttribute("name", "liyong");
// 这个也可以帮助我们来实现Bean的自定义,也就是在后置拦截里面根据这个判断进行一定的操作
beanDefinition.setSource();
DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
factory.registerBeanDefinition("person", beanDefinition);
// 利用后置处理器来使用附加属性
factory.addBeanPostProcessor(new BeanPostProcessor() {
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if (ObjectUtils.nullSafeEquals("person", beanName) && Person.class.equals(bean.getClass())) {
BeanDefinition bd = factory.getBeanDefinition("person");
Object name = bd.getAttribute("name");
((Person) bean).setName((String) name);
}
return bean;
}
});
Person person = factory.getBean("person", Person.class);
System.out.println(person);
}
容器配置元信息