首页 > 其他分享 >AOP

AOP

时间:2023-07-15 16:12:53浏览次数:30  
标签:JDK 对象 代理 CGLIB AOP 动态

AOP(面向切面编程)

问题

应用中非业务的通用功能(日志管理、权限管理、事务管理、异常管理等)代码横向散布在多个不同的业务模块中,容易产生大量重复性代码,不利于复用和维护。

解决方案

Spring AOP在运行时为目标对象通过动态代理(JDK或者CGLIB)生成一个动态代理对象,在代理对象中实现对目标对象的增强。

代理技术

描述

JDK动态代理

Spring AOP默认的动态代理方式,如果目标对象实现了接口,那么通过JDK的java.lang.reflect.Proxy类来代理。

CGLIB动态代理

如果目标对象没有实现接口,那么通过CGLIB生成目标对象的子类来代理目标对象。

因为标记为final的方法是无法覆盖的,所以这种方法是无法完成代理的。

JDK动态代理只提供接口的代理,创建的代理对象可以强转为接口类型。

CGLib动态代理通过生成被代理对象的子类重写父类方法来实现,创建的代理对象可以强转为被代理对象类型。

标签:JDK,对象,代理,CGLIB,AOP,动态
From: https://www.cnblogs.com/WJQ2017/p/17556286.html

相关文章

  • AOP总结
         ......
  • AOP通知获取数据
         ......
  • AOP工作流程
       ......
  • AOP入门案例
            ......
  • AOP简介
       ......
  • Spring AOP、拦截器、过滤器的区别
    一:区别与概念   Filter过滤器:拦截web访问url地址。   Interceptor拦截器:拦截以.action结尾的url,拦截Action的访问 (控制层Controller)。   Spring AOP拦截器:只能拦截Spring管理Bean的访问(业务层Service)。   概念:   SpringAOP:   SpringAOP,......
  • AOP日志切面拦截出现异常:java.lang.IllegalStateException: It is illegal to call th
    问题描述一个下载功能,后端代码出现异常,被AOP的日志切面拦截,出现异常。具体异常如下:java.lang.IllegalStateException:Itisillegaltocallthismethodifthecurrentrequestisnotinasynchronousmode(i.e.isAsyncStarted()returnsfalse) atorg.apache.catali......
  • Spring Aop 所有需要的Maven依赖
    <dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.5</version></dependency>这个依赖是AspectJ的编织器(weaver),它是一个面向切面编程(AOP)的工具,用于在运行时对Java代码进行横切(cross-cutting)操作和增强。As......
  • 通过aop 注解的方式防止表单重复提交
    pom.xml<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><a......
  • (六)Spring源码解析:Spring AOP源码解析
    〇、AOP概念Aspect:切面给业务方法增加到功能,切面泛指交叉业务逻辑。上例中的事务处理、日志处理就可以理解为切面。常用的切面是通知(Advice)。实际就是对主业务逻辑的一种增强。Pointcut:切入点切入点指声明的一个或多个连接点的集合,通过切入点指定一组方法。被标记为final......