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

我正在做一场模拟考试,我不太理解其中一个答案,该答案缺乏解释为什么它是正确的。

(由 kriegaex 从这里向下编辑,添加下面评论中的问题以及一些格式和改写,以使文本更加连贯和可读。)

  • 问题: “以下关于 Spring 代理功能的说法哪一项是正确的?”

  • 答: “有一种 Spring 代理可以替换方法返回的对象。”

据我所知,Spring AOP 可以使用两种类型的代理:

  • JDK动态代理

  • CGLIB 代理

据我了解,这是 Spring 中大量使用的两种类型的代理。例如,当使用@Transactional或创建方面 ( @Aspect) 时。

我对给出的答案的理解是他们指向的是这个@Around方面。但是,我不明白为什么他们称其为“Spring 代理类型”。方面是代理吗?因此,我对使用 JDK 或 CGLIB 代理的方面的理解是否不正确?


一只甜甜圈
浏览 94回答 1
1回答

慕桂英546537

如果您提供了所有可能的答案(包括不正确的答案),这个问题会更容易理解。但鉴于正确的(这确实听起来很奇怪),我可以告诉你以下内容:JDK 和 CGLIB 代理都有相同的目的:包装和替换原始对象,以便能够向其方法调用注册一些拦截器,无论是通过 Spring AOP 还是其他方法。是的,这两种代理类型在 Spring 中都大量使用,JDK 代理用于实现接口的类,CGLIB 代理用于未实现任何接口的类。或者,您可以将 Spring 配置为对接口类型也使用 CGLIB 代理。不存在“@Around方面”这样的东西,只有@Around建议类型(除了其他建议类型,例如@Before和@After)。不,方面不是代理。但是 Spring AOP 使用代理来实现其通过委托模式执行 AOP 的方式,这与 AspectJ 不同,AspectJ 不使用任何代理,而是使用直接字节码工具来实现其目标。在 Spring 文档中查找更多信息。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java