java - Spring Java 配置和 BeanFactoryPostProcessor

标签 java spring spring-java-config

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

相关文章:

Java UDP发送-接收数据包一一接收

java - 通过 eclipse 创建一个 apk

java - 预验证并将用户名转发给默认验证提供程序

java - Spring Security 自定义 token 过滤器

java - 为什么 Android Firebase 会跳过身份验证 Activity

java - 如何在 hibernate 配置文件中使用环境变量?

java - 如何使用 Nexus 代理 Spring Milestone 存储库

java - 决定在运行时加载哪个 JavaConfig 类

java - spring security中尝试访问登录页面时访问被拒绝异常

java - 为双向流实现类似的接口(interface)