Spring 代理底层。自定义 BeanPostProcessor 代理

问题描述 投票:0回答:1

尝试编写自定义 BeanPostProcessor 我发现许多教程展示了从我的 bean 创建代理对象并将其返回由另一个 BeanPostProcessor 处理的简单方法。我想知道,这种方法是否会破坏进一步的 BPP 链,因为下一个 BPP 将看不到类元数据?是否有一些其他技巧可以避免这些教程中未显示的断链?另外,在创建同一个bean的@Transactional、@Async等代理时,spring本身如何处理这种情况?

java spring oop proxy frameworks
1个回答
0
投票

如果在 DefaultSingletonBeanRegistry::getSingleton 中放置断点,您将能够内省 this.beanPostProcessors 并查看处理器及其顺序。 事务后处理器是 APO,因此它们将使用 CGLib 来扩展您的原始 bean,对于事务,您可以在

AbstractBeanFactoryAwareAdvisingPostProcessor::prepareProxyFactory
中放置一个断点来查看哪些 bean 被 @Trancational 包装。

与 Spring 中的大多数内容一样,

@Ordered
可用于控制后处理器的应用顺序,一个经典示例是如何处理(Spring 集成)@Retry 和 @Transactional,Spring Retry with Transactional。

© www.soinside.com 2019 - 2024. All rights reserved.