【问题标题】:What is the real world use of BeanPostProcessor in spring?Spring 中 BeanPostProcessor 的实际用途是什么?
【发布时间】:2017-01-02 23:51:44
【问题描述】:

我知道 bean 后处理器并且它正在工作,但我不确定它将如何帮助我们在现实世界的应用程序中。在实际应用中,下面的定义方法中应该有什么?

1 Some configuration Code?
2 Some validation code for bean ?




 public class MyBeanInitProcessor implements BeanPostProcessor{
     
        @Override
        public Object postProcessAfterInitialization(Object bean, String beanName)
                throws BeansException {
            System.out.println("before initialization: "+beanName);
            return bean;
        }
     
        @Override
        public Object postProcessBeforeInitialization(Object bean, String beanName)
                throws BeansException {
            System.out.println("after initialization: "+beanName);
            return bean;
        }
    }

【问题讨论】:

    标签: java spring dependency-injection ioc-container


    【解决方案1】:

    在大多数实际应用程序中,您不会直接与它们进行交互。 Spring provides 28 implementations out of the box 处理标准功能,如自动装配和应用 AOP 建议。您可以通过使用标准 Spring 特性来间接使用它们,例如在方法参数上应用验证注释,它应用 MethodValidationPostProcessor,或者进行方法调用 @Async,它应用 AsyncAnnotationBeanPostProcessor

    【讨论】:

    • 你有没有写过自己的后处理器这样的场景?
    • @Monica 不。它是核心基础架构的一部分,除了已经包含的那些之外,我从来不需要任何东西。我所做的是编写各种规则,例如 AOP 拦截器或验证,由现有处理器应用。
    【解决方案2】:

    BeanPostProcessor 是一种在每次初始化 bean 时运行一段代码的方法。

    • 假设您有一个算法来处理 未确定 数量的客户对象。
    • 假设每个客户都是一个 bean,并且(您可以在 LinkedList 中找到)每个 bean 都可以判断它后面是否有一个 bean。
    • 进一步说明,当初始化该列表中的最后一个 bean 时,您需要引发一个事件。

    如果您在 postProcessAfterInitialization() 中添加代码,您可以这样做。了解Spring,无疑有更好的方法。不过,对我来说,这将是 BeanPostProcessor 可能会有所帮助的情况。

    【讨论】:

    • 但是,如果它在列表中并且它是列表中的最后一个条目,您将如何找到它?
    猜你喜欢
    • 2011-04-02
    • 2019-05-17
    • 2015-04-22
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 2015-06-07
    相关资源
    最近更新 更多