六、spring原理(3)AOP原理

匿名 (未验证) 提交于 2019-12-02 23:41:02

一、概念

"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块, 并将其命名为"Aspect",即切面。

使用"横切"技术,AOP 把软件系统分为两个部分:核心关注点和横切关注点。

业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志、事物。AOP 的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。

AOP主要应用场景有

  1. Authentication 权限
  2. Caching 缓存
  3. Context passing 内容传递
  4. Error handling 错误处理
  5. Lazy loading 懒加载
  6. logging, tracing, profiling and monitoring 记录跟踪 优化 校准
  7. Performance optimization 性能优化
  8. Resource pooling 资源池
  9. Synchronization 同步

二、AOP核心

1.切面(aspect):

2.横切关注点:

3.连接点(joinpoint):

4.切入点(pointcut):

5.通知(advice):

所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、 异常、最终、环绕通知五类。

6.目标对象:

7.织入(weave):

8.引入(introduction):

在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段。

1.JDK 动态接口代理

JDK 动态代理主要涉及到 java.lang.reflect 包中的两个类:Proxy 和 InvocationHandler。

InvocationHandler是一个接口,通过实现该接口定义横切逻辑,并通过反射机制调用目标类 的代码,动态将横切逻辑和业务逻辑编制在一起。

2.CGLib 动态代理

CGLib全称为Code Generation Library,是一个强大的高性能,高质量的代码生成类库, 可以在运行期扩展 Java 类与实现 Java 接口,CGLib 封装了 asm,可以再运行期动态生成新 的 class。

四、示例代码

 @Aspect  public class TransactionDemo {    @Pointcut(value="execution(* com.yangxin.core.service.*.*.*(..))")    public void point(){        }      @Before(value="point()")    public void before(){      System.out.println("transaction begin");    }    @AfterReturning(value = "point()")    public void after(){      System.out.println("transaction commit");    }   @Around("point()")    public void around(ProceedingJoinPoint joinPoint) throws Throwable{      System.out.println("transaction begin");      joinPoint.proceed();      System.out.println("transaction commit");    } }

文章来源: https://blog.csdn.net/M_azed/article/details/91456714
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!