Java 向Spring托管bean添加代理

Java 向Spring托管bean添加代理,java,spring,proxy,transactions,Java,Spring,Proxy,Transactions,我正在处理一个web项目,它的一个要求是在数据库中的每个操作之前调用一些存储过程(用于init/debug/audit目的)。 我的服务层使用Spring来管理事务,这意味着它们是明确分隔的 我的想法是通过注释添加一个代理类,以调用这些SP。 我读了很多博客,关于编写注释、AOP、AspectJ、代理等等的文章,但我不明白如何使用它来满足我的需要 我的问题之一是如何确保Spring代理(在启动事务后)调用我的代理?另一个问题是如何触发创建我自己的代理? 任何精确性都是值得欢迎的,因为到目前为止,

我正在处理一个web项目,它的一个要求是在数据库中的每个操作之前调用一些存储过程(用于init/debug/audit目的)。 我的服务层使用Spring来管理事务,这意味着它们是明确分隔的

我的想法是通过注释添加一个代理类,以调用这些SP。 我读了很多博客,关于编写注释、AOP、AspectJ、代理等等的文章,但我不明白如何使用它来满足我的需要

我的问题之一是如何确保Spring代理(在启动事务后)调用我的代理?另一个问题是如何触发创建我自己的代理?
任何精确性都是值得欢迎的,因为到目前为止,我理解了主要思想,但我不知道如何才能真正做到这一点。

我认为您应该从更多地阅读AOP和AspectJ开始,我可以向您推荐著名的《Spring in Action》一书中的“面向方面的Spring”一章。它会回答你所有的问题

如何确保Spring代理调用我的代理(在 它启动了交易)

好吧,您不必自己做,Spring确保根据您配置建议的方式调用建议

如何触发创建我自己的代理


我不确定我是否理解这个问题,但是Spring执行AOP所需的代理将由Spring创建,这样您就不必自己触发任何代理创建。

您可以使用Spring建议调用SP。使用建议排序在同一事务中运行SP。
可以通过order属性控制首先应用哪个代理

从弹簧参考

建议订购


优先级最高的通知在“传入”过程中首先运行(因此,给定两条before通知,优先级最高的通知将首先运行)。从连接点开始的“中途退出”中,优先级最高的通知最后运行(因此,给定两条after通知,优先级最高的通知将第二次运行)。

最后,我成功地实现了它,我描述了如何实现它


希望这会有所帮助……

我看到了这一点,但我不清楚的正是“最高优先级”这一术语。这是否意味着第一个编写的代码将首先执行?或者说它是一个可以设置在某处的属性?还是别的什么?是订单属性帮助您做出决定。在注释中,为order属性输入比自定义建议更高的数字。这将使事务代理包装您的自定义代理。因此,事务将在调用自定义代理之前启动。感谢您的建议,我将仔细阅读,稍后再回来:)