spring的AOP
《AOP--概念》
AspectorientedPrograming
1.面向切面编程,不改源代码 还能达到增强功能的目的
2.采用横向抽取机制,取代了传统纵向继承体系重复性代码
《AOP--原理》
aop横向抽取机制.png------jdk动态代理、CGlib代理
《AOP相关术语》
Joinpoint(连接点):类里面可以被增强的方法, 这些方法就称为连接点
Pointcut(切入点)*:
在类里面可以有很对方法被增强,
在实际操作中,只是增强了其中的一个add方法,
那么这个实际增强了的add方法,就称为切入点
Advice(通知/增强)*:
实际要拓展的功能是什么,这个功能逻辑就称为增强
比如 要在一个可以增强的方法里边 拓展一个日志功能 这个日志功能就称为增强
通知分为:
前置通知,在方法之前执行
后置通知,在方法之后执行
异常通知,在方法出现异常时执行
最终通知,在后置通知之后来执行
环绕通知,在方法之前和之后执行
Aspect(切面)*:
把增强应用到具体方法上面, 这个过程 称之为切面
即,把增强用到切入点的过程
Target(目标对象)*:代理的目标对象--要增强的类
Weaving(织入):把增强应用到目标对象的过程
Proxy(代理):一个类被aop织入增强后,就产生一个结果代理类
《使用Aspectj实现aop(操作不改源代码 达到增强功能的目的) 》
—aspectj是一个面向切面的框架,本身不属于spring 只是和spring一起合作,从而达到操作aop的目的
---增强的类型有如下几种:
前置增强 <aop:before />
后置增强 <aop:after-returning />
环绕增强
***第一种方式***
基于Aspectj的xml配置文件 进行aop操作
ps:一个知识点
在xml中 使用【表达式】配置切入点的常用表达式
execution(访问修饰符 空格 切入点的全路径(参数))
(1)execution(* com.mybag.aop.Book.add(..))
表示对Book对象的add方法进行通知(增强)
(2)execution(* com.mybag.aop.Book.*(..))
表示对Book对象的所有方法进行通知(增强)
(3)execution(* user*(..))
表示对Book对象的所有以user开头的方法进行通知(增强)
(4)execution(* *.*(..))
表示对所有对象的所有方法进行通知(增强)
***第二种方式***
基于Aspectj的注解方式 进行aop操作
注解方式增强类型:
@Before 前置通知
@AfterReturning 后置通知
@Around 环绕通知
@AfterThrowing 抛出通知
@After 最终通知 不管是否异常,该通知都会执行
《log4j介绍 》
1.通过log4j 可以看到程序运行过程中更详细的信息
经常使用它来查看日志
2.使用
(1) 导入两个jar包
(2) 复制log4j的配置文件log4j.properties 到src下
(3) info,看到基本信息 debug,看到更详细的运行日志