# spring05_aop **Repository Path**: Yunios/spring05_aop ## Basic Information - **Project Name**: spring05_aop - **Description**: spring05_aop aop - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-01-31 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README AOP 的概念 1:理解AOP是什么 * AOP是Aspect-oriented programming 面向切面(方面)的编程的简写 * AOP的实现可以把业务逻辑和系统级的服务进行隔离,使业务逻辑跟各个系统级服务的耦合度降低, 提高程序的重用性和开发效率 业务逻辑:某个类的某个方法本身要实现的功能. 系统级的服务:系统的日志,事务,权限验证 * 系统级服务的插入: 详见代码studentService.java 举例:村支书找村民通知一个事情, 原来要一个一个分别去告诉他们,有了AOP(广播)以后,对广播以后,大家都知道 2:怎么实现AOP * AOP的底层实现的原理都是动态代理 详见 :JDKProxyTest.java 注意:动态代理有两种方式:jdk动态代理 /cglib动态代理 jdk的动态代理机制只能代理实现了接口的类 cglib的动态代理既可以代理实现了接口的类,也可以代理没有实现接口的类 3:AOP一些专业术语 * 切面(Aspect) 就是交叉在各个业务逻辑中的系统服务,类似于安全验证,事务处理,日志记录都可以理解为切面 * 织入(weaving) 就是将切面代码插入到目标对象某个方法的过程,相当于我们在jdk动态代理里面的 invocationHandler接口方法的内容 * 连接点(JointPoint) 理论上可能被切面织入的所有方法 ,比如addStudent,delStudent ,getStudentList..... 通常所有方法都可以被称为连接点 * 切入点(PointCut) 就是实际上被切面织入的方法 * 目标对象(target) 就是切入点和连接点所属的 类 StudentService * 通知(Advice) 就是切面的实现,切面织入的目标对象,时间点(方法执行前 ,后,前后,异常)以及内容 * 顾问(Advisor) 其实就是通知的一个封装和延伸,可以将通知以更为复杂的方式织入到某些方法中 将切面织入到目标对象的连接点方法,使连接点成为切入点 4: Spring的AOP实现 4.1 搭建springAOP开发环境需要引入的jar包 * aopalliance-1.0.jar * spring-aop-4.2.1.RELEASE.jar 注意:引入lib包到项目中 4.2 :各种通知(前置通知,后置通知,环绕通知,异常通知) * 前置通知 implement MethodBeforeAdvice * 后置通知 implement AfterReturningAdvice * 环绕通知 implement org.aopalliance.intercept.MethodInterceptor; * 异常通知 implement ThrowsAdvice 4.3 :配置通知和应用通知 * 注册通知 * 注册代理生成器(注入目标类接口,目标类,通知) 4.4 通知的注意点 * 在代理类生成器的配置里面 配置接口的默认可以省略 * 因为后置通知是在目标方法执行后才执行 ,他可以得到目标方法返回的值 ,但是不能改变他的值 * 环绕通知有在目标方法执行前的代码,也有在目标方法执行后的代码,可以得到目标方法的值,也可以改变它