1

请原谅这个春季初学者的问题。我正在阅读第一版的第 4 章,并介绍了回调方法和 Bean 后处理器。

现在我只是对这两者感到困惑,似乎他们都在做某事。创建bean实例时,如何区分两者?也许一个例子会很好?

我个人的理解是,如果我们必须找到差异,那么在实际创建bean时启动回调方法,在创建bean后稍微调用Bean后处理器?另外,我认为差异也可能是初始化回调方法只关注一个bean,而Beanpost procsso将一个一个地处理所有bean实例?

另外,任何人都可以通过将 JSR250 注释 @PreDestroy 和 @PostConstruct 与上述两个概念进行比较和对比来帮助我进一步解释差异吗?

非常感谢您的帮助!

4

2 回答 2

4

我已经有一段时间没有使用其中任何一个了,但我认为您所指的回调方法和@PostConstruct 方法是同一回事。但要回答你的问题,区别......

1) @PostConstruct(或 afterPropertiesSet)方法是特定类的内部方法,将在实例化 bean 后调用。这确实是您放置特定类型操作的地方。

2) BeanPostProcessor 将触及所有 Spring bean。所以这里是你可以放置横切功能的地方,不一定是特定于类的。

一个小例子……假设我有一个小型地址簿应用程序,用于跟踪我的朋友和他们的地址。如果我有一些我无法追踪的疯狂错误,我可能会使用 BeanPostProcessor 用一些日志记录来包装我的所有 Spring bean,例如“现在调用 Address.getStreet()...,现在调用 Address.getCity()。 ……”。

现在我可以在 Address 中使用 @PostConstruct 方法来验证和查找针对某些 Web 服务的邮政编码,以查找我只有城市/州的地址。

现在,我可能实际上并没有我的一个域对象在现实中访问 Web 服务,但这个想法是为了说明 @PostConstruct 可以处理特定于类的东西,而 BeanPostProcessor 可以处理跨越多个类的东西。

另外值得注意的是,BeanPostProcessor 有两个方法可以覆盖:postProcessBeforeInitialization 和 postProcessAfterInitialization,这将让您决定在 bean 的 @PostConstruct 方法之前和之后运行什么。

于 2012-11-16T02:27:13.657 回答
0

Bean 后处理器接口有两个回调方法: 1. PostProcessBeforeInitializationPostProcessAfterInitializationPostProcessBeforeInitialization方法在调用 bean 的 init-method 或 afterPropertySet 方法之前被调用。

PostProcessAfterInitialization方法只是在 bean 初始化完成后调用。

Bean Post Processors 提供了在 bean 初始化之前和之后做某事的机会。

于 2016-10-04T05:02:09.820 回答