Spring Framework中回调方法和Bean后处理器之间的区别


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

现在我只是对这两者感到困惑,当创建bean实例时,它们似乎都在做某事,那么我如何区分这两者呢?也许举个例子就好了?

我个人的理解是,如果我们必须找到区别,那么回调方法是在bean实际创建时启动的,bean后处理器是在bean创建后稍微调用的?此外,我认为不同之处还可能是初始化回调方法只关注一个bean,而Beanpost-procso将逐个处理所有bean实例?

此外,有人能帮助我通过将JSR250注释@PreDestroy和@PostConstruct与上述两个概念进行比较来进一步解释差异吗?

非常感谢你的帮助!

我已经有一段时间没有使用这两种方法了,但我认为您所指的回调方法和@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方法之前和之后运行什么。

Bean后处理器接口有两种回调方法:1PostProcessBeforeInitializationPostProcessAfterInitializationostProcessBeforeInitialization方法是在调用bean的init方法或afterPropertySet方法之前调用的。

PostProcessAfterInitialization方法是在bean的初始化刚刚完成之后调用的。

Bean后处理器提供了在初始化Bean之前和之后执行某些操作的机会。

最新更新