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