Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java BeanPostProcessor混淆_Java_Spring - Fatal编程技术网

Java BeanPostProcessor混淆

Java BeanPostProcessor混淆,java,spring,Java,Spring,我试图理解春天的BeanPostProcessor,但我不明白它是做什么的。BeanPostProcessor定义两个在这些点调用的方法是否正确: 在初始化之前(init方法或afterPropertieSet),但创建实例 在调用init方法或AfterPropertieSet方法之后 对吗?给出了第118页的示例和文本,进一步说明会令人困惑。我不认为我被允许从文本中复制更多的内容到问题中,但是注释和那里发生的事情很难理解 您是应该在您想要的bean上实现这个接口,还是应该在许多bean的

我试图理解春天的BeanPostProcessor,但我不明白它是做什么的。BeanPostProcessor定义两个在这些点调用的方法是否正确:

  • 在初始化之前(init方法或afterPropertieSet),但创建实例
  • 在调用init方法或AfterPropertieSet方法之后
对吗?给出了第118页的示例和文本,进一步说明会令人困惑。我不认为我被允许从文本中复制更多的内容到问题中,但是注释和那里发生的事情很难理解

您是应该在您想要的bean上实现这个接口,还是应该在许多bean的通用bean上使用这个接口?我看到您同时传入了and对象和字符串参数

有时候,你可能会发现自己处于一个需要的位置 在弹簧前后立即执行一些附加处理 实例化bean。处理可以像修改一样简单 bean或返回完全不同的对象一样复杂!这个 BeanPostProcessor接口有两种方法: postProcessBeforeInitialization,在Spring调用之前调用 任何bean初始化挂钩(例如 初始化Bean.AfterPropertieSet或init方法),以及 postProcessAfterInitialization,Spring在 初始化钩子成功

Pro Spring 2.5,第118页

您实现了构建一个服务,该服务在创建时应用于上下文中的所有bean。JavaDocs展示了许多具体的示例,但我一直使用的一个示例是。这将使用反射来扫描bean类,查找字段和方法上的
@Autowired
注释

public class MyBean {
    @Autowired MyOtherBean otherBean; // assigned by AutowiredAnnotationBPP
    ...
}

当您在Spring或应用于多个Bean子集的特性之上构建自己的框架时,此功能最为有用。您更有可能使用Spring提供的现有bean后处理器。

Spring为您提供了许多后处理器,而不仅仅是
BeanPostProcessor
。而且,它们中的大多数都由弹簧本身使用。您在这个问题中提到的一个,用于(作为其名称状态)在实例化bean之后对其进行后期处理。Spring容器的行为如下所示:

  • Spring实例化bean并调用其构造函数
  • 初始化之前的后处理(对象bean、字符串bean名称)被调用
  • bean初始化过程:
    @PostConstruct
    afterPropertiesSet()
    (由
    初始化bean
    回调接口定义),自定义配置的
    init
    方法
  • postProcessAfterInitialization(对象bean、字符串bean名称)
    被调用
乍一看,它可能看起来很复杂,而且势不可挡,但当您在Spring上构建复杂的应用程序时,所有这些功能都是非常宝贵的

可能的场景,例如(取自Spring本身):

  • AutowiredNotationBeanPostProcessor
    -扫描bean以查找
    @Autowire
    注释以执行依赖项注入
  • RequiredAnnotationBeanPostProcessor
    -检查是否存在所有依赖项 已注入标记为
    @Required
  • servletcontextawarecomposor
    -向bean注入
    ServletContext
    实现
    ServletContextAware
    接口
  • 实际上,诸如JSR-250
    @PostConstruct
    @PreDestroy
    之类的初始化/构造回调是使用后处理器实现的:
    CommonAnnotationBeanPostProcessor
当然,所有提到的后处理器都必须按照特定的顺序执行,但这是Spring的责任来确保它