为了账号安全,请及时绑定邮箱和手机立即绑定

“有一种 Spring 代理可以替换方法返回的对象”是什么意思?

“有一种 Spring 代理可以替换方法返回的对象”是什么意思?

一只甜甜圈 2023-09-27 17:10:39
我正在做一场模拟考试,我不太理解其中一个答案,该答案缺乏解释为什么它是正确的。(由 kriegaex 从这里向下编辑,添加下面评论中的问题以及一些格式和改写,以使文本更加连贯和可读。)问题: “以下关于 Spring 代理功能的说法哪一项是正确的?”答: “有一种 Spring 代理可以替换方法返回的对象。”据我所知,Spring AOP 可以使用两种类型的代理:JDK动态代理CGLIB 代理据我了解,这是 Spring 中大量使用的两种类型的代理。例如,当使用@Transactional或创建方面 ( @Aspect) 时。我对给出的答案的理解是他们指向的是这个@Around方面。但是,我不明白为什么他们称其为“Spring 代理类型”。方面是代理吗?因此,我对使用 JDK 或 CGLIB 代理的方面的理解是否不正确?
查看完整描述

1 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

如果您提供了所有可能的答案(包括不正确的答案),这个问题会更容易理解。但鉴于正确的(这确实听起来很奇怪),我可以告诉你以下内容:

  • JDK 和 CGLIB 代理都有相同的目的:包装和替换原始对象,以便能够向其方法调用注册一些拦截器,无论是通过 Spring AOP 还是其他方法。

  • 是的,这两种代理类型在 Spring 中都大量使用,JDK 代理用于实现接口的类,CGLIB 代理用于未实现任何接口的类。或者,您可以将 Spring 配置为对接口类型也使用 CGLIB 代理。

  • 不存在“@Around方面”这样的东西,只有@Around建议类型(除了其他建议类型,例如@Before@After)。

  • 不,方面不是代理。但是 Spring AOP 使用代理来实现其通过委托模式执行 AOP 的方式,这与 AspectJ 不同,AspectJ 不使用任何代理,而是使用直接字节码工具来实现其目标。

在 Spring 文档中查找更多信息。


查看完整回答
反对 回复 2023-09-27
  • 1 回答
  • 0 关注
  • 55 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信