我在Spring中使用Java配置。 目标是在BeanFactoryPostProcessor阶段替换beanDefinion类。
我有一个豆子
@Bean
public User user() {
CustomUser user = new CustomUser();
user.setName("UserA");
return user;
}
和一个新的类“NewTypeOfCustomUser”,并希望用NewTypeOfCutsomUser替换CustomUser。
在我看到一个人在使用XML配置时执行此操作的示例之前。它是使用
完成的BeanDefinition.setBeanClassName
方法。但是,在我的案例中beanDefinition的类在BeanFactoryPostProcessor的工作阶段是null。似乎Java Config的工作方式与XML-configs完全不同。
所以我的问题是:是否可以使用Java配置执行此过程?
答案 0 :(得分:0)
据我了解您的要求,您希望使用CustomUser
更改NewTypeOfCustomUser
的实例类型。使用XML配置,如您所述,可以使用BeanFactoryPostProcessor
来实现。使用java配置,您正在寻找的是修改user()
bean方法的实际代码,我认为这不可行。
你可以做的是使用BeanPostProcessor
,它直接在bean实例上运行,而不是作为BeanFactoryPostProcessor
的声明,并修改所需bean的实例。以下是您可以做的事情的示例:
public class CustomUserBeanPostProcessor implements BeanPostProcessor {
public CustomUserBeanPostProcessor () {
System.out.println("CustomUserBeanPostProcessor constructor called");
}
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("postProcessBeforeInitialization method invoked");
System.out.println(bean.getClass() + " " + beanName);
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("postProcessAfterInitialization method invoked");
System.out.println(bean.getClass() + " " + beanName);
if (bean instanceof User) {
bean = new NewTypeOfCustomUser((User) user);
}
return bean;
}
}
这还要求您向接受NewTypeOfCustomUser
参数的CustomUser
添加构造函数,并根据您的需要管理数据。