我正在做一场模拟考试,我不太理解其中一个答案,该答案缺乏解释为什么它是正确的。(由 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 文档中查找更多信息。
添加回答
举报
0/150
提交
取消