spring核心思想一之AOP

1.什么是AOP

面向切面编程,与OOP(面向对象编程)对比,AOP,是处理一些横切性问题,但这些横切性问题不会影响到主逻辑的实现,例如:日志记录。但是会散落到代码的各个部分,难以维护。AOP就是把这些问题和业务逻辑分开,达到与主业务逻辑解耦的目的。

2.AOP的实现原理

1是通过动态代理实现,JDK动态代理和cglib动态代理。2这两种动态代理实现选择主要是根据横切的是 接口,还是 class类,如果是接口 那么就是jdk的动态代理,返回的是接口的实例;
如果是class类,那么就是cglib的动态代理创建的代理实类;
3这些代理实例通过class字节码文件解析(jvm指令解析字节码文件),流导入,创建代理实例,
java 动态代理为啥必须是接口?
因为代理类已经继承了Proxy类,java是单继承多实现,所以我们被代理对象必须是接口(生成字节码文件的时候发现已经继承了Proxy)

查看spring源码可以看到
执行流程图
执行流程

3.AOP作用

1-降低模块之间的耦合度。
2-使系统容易扩展。
3-更好的代码复用

4AOP如何使用

查看官方网页Spring官方文档说明

4.1aop需要理解的概念

AspectJ和Spring AOP 是AOP的两种实现方案,Aspectj是aop的java实现方案,是一种编译期的用注解形式实现的AOP;Spring aop是aop实现方案的一种,它支持在运行期基于动态代理的方式将aspect织入目标代码中来实现aop,其中动态代理有两种方式(jdk动态代理和cglib动态代理),这里不展开说。这里有几个概念,需要正确理解:

joinPoint:连接点。在spring中只支持方法连接点,连接点指的是可以使用advice(增强)的地方,例如一个类中有5个方法,那么这5个方法,那么这5个方法都

可以是连接点。

pointcut:切点。可理解为实实在在的连接点,即切入advice(增强)的点。例如一个类中有5个方法,其中有3个方法(连接点)需要织入advice(增强),那么这3个需要织入advice的连接点就是切点。

advice:增强。实际中想要添加的功能,如日志、权限校验。

advisor:切面。由切点和增强相结合而成,定义增强应用到哪些切点上。

4.2.环绕

//通过ProceedingJoinPoint想要获取当前执行的方法:
//pointcut execution(* powerx.io.StudentService.*(..))
//or    @Around("@annotation(powerx.io.Mylog)&&execution(* powerx.io.StudentService.*(..))")

@Around(pointcut)
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable{
       //方法
        Object target = joinPoint.getTarget().getClass().getName();
        System.out.println("调用者+"+target);
       //通过joinPoint.getArgs()获取Args参数
        Object[] args = joinPoint.getArgs();
        //2.传参  
        System.out.println("2.传参:----"+args[0]);  
         for (Object object : args) {
            System.out.println(object instanceof HttpServletRequest);
        }
        
        return joinPoint.proceed();
        
    }

如何实现spring项目中使用AOP参考
参考博客

5AOP使用场景

Authentication 权限

Caching 缓存

Context passing 内容传递

Error handling 错误处理

Lazy loading 懒加载

Debugging  调试

logging, tracing, profiling and monitoring 记录跟踪 优化 校准

Performance optimization 性能优化

Persistence  持久化

Resource pooling 资源池

Synchronization 同步

Transactions 事务

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章