gpt4 book ai didi

java - Spring Java 配置和 BeanFactoryPostProcessor

转载 作者:行者123 更新时间:2023-12-02 12:06:20 25 4
gpt4 key购买 nike

我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com