我在 Spring 中使用 Java 配置。 目标是替换 BeanFactoryPostProcessor 阶段的 beanDefinion 类。
我有一颗 bean
@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 配置完全不同。
所以我的问题:是否可以使用 Java 配置来完成此过程?
最佳答案
据我了解您的要求是什么,您希望使用 NewTypeOfCustomUser
更改 CustomUser
实例的类型。通过 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
参数并根据您的需要管理数据。
关于java - Spring Java 配置和 BeanFactoryPostProcessor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46887902/