Aspect实现登录,登出,修改密码的日志

1.了解常用注解:

@Aspect:作用是把当前类标识为一个切面供容器读取

@Pointcut:Pointcut是植入Advice的触发条件。每个Pointcut的定义包括2部分,一是表达式,二是方法签名。方法签名必须是 public及void型。可以将Pointcut中的方法看作是一个被Advice引用的助记符,因为表达式不直观,因此我们可以通过方法签名的方式为 此表达式命名。因此Pointcut中的方法只需要方法签名,而不需要在方法体内编写实际代码。

@Around:环绕增强,相当于MethodInterceptor

@AfterReturning:后置增强,相当于AfterReturningAdvice,方法正常退出时执行

@Before:标识一个前置增强方法,相当于BeforeAdvice的功能,相似功能的还有

@AfterThrowing:异常抛出增强,相当于ThrowsAdvice

@After:final增强,不管是抛出异常或者正常退出都会执行

JoinPoint:对象封装了SpringAop中切面方法的信息,在切面方法中添加JoinPoint参数,就可以获取到封装了该方法信息的JoinPoint对象.

常用api:

2.常用方法名 功能

Signature getSignature(); 获取封装了署名信息的对象,在该对象中可以获取到目标方法名,所属类的Class等信息

Object[] getArgs(); 获取传入目标方法的参数对象

Object getTarget(); 获取被代理的对象

Object getThis(); 获取代理对象

3.了解切点表达式

1.execution(方法修饰符 返回类型 方法全限定名(参数)) 主要用来匹配整个方法签名和返回值的

“execution(* com.mygeno.official.login.controller.*(…))”

整个表达式可以分为五个部分:

1、execution(): 表达式主体。

2、第一个*号:表示返回类型, *号表示所有的类型。

3、包名:表示需要拦截的包名,后面的两个句点表示当前包和当前包的所有子包,com.sample.service.impl包、子孙包下所有类的方法。

4、第二个*号:表示类名,*号表示所有的类。

5、*(..):最后这个星号表示方法名,*号表示所有的方法,后面括弧里面表示方法的参数,两个句点表示任何参数

 6  *只能匹配一级路径 

 7 ..可以匹配多级,可以是包路径,也可以匹配多个参数

 8  + 只能放在类后面,表明本类及所有子类


4注意:

注意AfterReturning配置必须有argNames参数,且参数值和returning值一样,这样在织入代码里面便可通过returning的值获取被织入函数的返回值

/**

* 目标方法执行之后且没有异常情况下执行。

* @param jpoint

*/

@AfterReturning(value ="execution(* com.mygeno.official.login.controller.*.login*(..)) || execution(* com.mygeno.official.user.controller.*.*(..))",argNames ="jpoint,mygenoResponse",returning ="mygenoResponse")

public void afterMethod(JoinPoint jpoint,Object mygenoResponse)throws IOException {

你可能感兴趣的:(Aspect实现登录,登出,修改密码的日志)