码不出来怎么办 2023-02-15 17:15 采纳率: 100%
浏览 35
已结题

aop动态代理问题求解答

我今天跟着教程写了一遍aop的登陆验证,想到一个问题.aop实现动态代理的时候需要代理类实现接口,而controller层并没有实现接口,那应该使用cglib来代理,需要导入第三方依赖才行啊,但是教程里直接使用的aop依赖,这是为什么呢?

  • 写回答

4条回答 默认 最新

  • MarkHan_ 2023-02-15 17:35
    关注

    AOP(Aspect-Oriented Programming)是一种编程范式,通过将程序分解为各个方面(Aspect),然后再将各个方面独立开来进行编程,最后将它们合并到一起,从而实现代码的重用和降低复杂度的目的。

    动态代理是 AOP 中实现切面(Aspect)的一种方式。Java 提供了两种动态代理方式:JDK 动态代理和 CGLIB 代理。其中,JDK 动态代理只能代理实现了接口的类,而 CGLIB 代理则可以代理任何类,包括没有实现接口的类。

    在 Spring AOP 中,默认使用 JDK 动态代理来实现切面。如果要使用 CGLIB 代理来代理没有实现接口的类,则需要在配置文件中显式地声明。

    在您提到的情况中,Controller 层并没有实现接口,但是 AOP 仍然可以使用 JDK 动态代理来实现切面,原因在于 Spring AOP 会自动为没有实现接口的类创建一个代理类,该代理类会继承目标类并实现 Spring AOP 所需的接口。这种方式称为基于接口的代理(interface-based proxy)。

    因此,在您的教程中,虽然 Controller 层没有实现接口,但 Spring AOP 仍然可以使用 JDK 动态代理来实现切面,而不需要使用 CGLIB 代理。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 2月23日
  • 已采纳回答 2月15日
  • 赞助了问题酬金15元 2月15日
  • 创建了问题 2月15日

悬赏问题

  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器