Spring AOP 为什么需要代理类?

发布于 2024-09-18 16:03:00 字数 29 浏览 4 评论 0原文

AOP中代理类的职责是什么?它的作用是什么?

What is the responsibity of the proxy class in AOP? What is the role of that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

恋竹姑娘 2024-09-25 16:03:00

动态代理用于在bean的方法之前/之后执行附加代码。最简单的例子是事务处理:

  • spring在需要事务的bean周围创建一个代理,
  • 如果一个方法被声明为transactiona(例如用@Transactional注释),则代理启动一个新的事务并委托给真实方法
  • 真实方法执行并返回
  • 代理现在提交(或回滚)事务

因此您的代码变得与事务无关。当一个事务bean被注入另一个bean时,它实际上是被注入的代理(与您的bean类型相同)

并且代理是动态的,因为spring在编译时不知道所有bean的类型,所以它必须在运行时创建代理。

Dynamic proxies are used to execute additional code before/after methods of your beans. The most trivial example is transaction handling:

  • spring creates a proxy around your beans that need transactions
  • if a method is declared transactiona (e.g. annotated with @Transactional) the proxy starts a new transaction and delegates to the real method
  • the real method executes and returns
  • the proxy now commits (or rollbacks) the transaction

Thus your code becomes transaction-agnostic. And when a transactional bean is injected into another one, it is actually the proxy that gets injected (which is of the same type as your bean)

And proxies are dynamic, because spring does not know at compile time the types of all your beans, so it has to create the proxies at runtime.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文