Spring系列之 (十六):利用Spring AOP和自定义注解实现日志功能

Spring AOP的主要功能相信大家都知道,日志记录、权限校验等等。

用法就是定义一个切入点(Pointcut),定义一个通知(advice),然后设置通知在该切入点上执行的方式(前置、后置、环绕等),切点可以是注解

基于AsjectJ框架(注解方式)和自定义注解的支持

步骤:

1.在spring.xml中配置相关参数

2.创建自定义注解

3.定义一个切面类

4.在controller类方法中,使用


1.在spring.xml中配置相关参数

1.自动扫描包和启用@AsjectJ注解的支持

Spring系列之 (十六):利用Spring AOP和自定义注解实现日志功能

2.创建自定义注解

Spring系列之 (十六):利用Spring AOP和自定义注解实现日志功能

@Target、@Retention、@Inherited、@Documented为元注解(meta-annotation),它们是负责注解其他注解的。
  1. Target:指明注解支持的使用范围,取值可以参考枚举ElementType,以下:
    • ElementType.TYPE //类、接口、枚举
    • ElementType.FIELD //属性
    • ElementType.METHOD //方法
    • ElementType.PARAMETER //参数
    • ElementType.CONSTRUCTOR //构造器
    • ElementType.LOCAL_VARIABLE //局部变量
    • ElementType.ANNOTATION_TYPE //注解
    • ElementType.PACKAGE //包
  2. Retention:指明注解保留的的时间长短,取值参考枚举RetentionPolicy,一下:
    • SOURCE //源文件中保留
    • CLASS //class编译时保留
    • RUNTIME //运行时保留
  3. Inherited:指明该注解类型被自动继承如果一个annotation注解被@Inherited修饰,那么该注解作用于的类 的子类也会使用该annotation注解。
  4. Documented:指明拥有这个注解的元素可以被javadoc此类的工具文档化

3.定义一个切面类

Spring系列之 (十六):利用Spring AOP和自定义注解实现日志功能

因篇幅问题,省去其他方法,如

[email protected](pointcut = "controllerAspect()")

public void doAfter(JoinPoint joinPoint)

[email protected]("controllerAspect()")

public void afterReturn(JoinPoint joinPoint)

在切面类中,也可以编写添加日志表的操作代码(*发挥)

4.在controller类中测试

Spring系列之 (十六):利用Spring AOP和自定义注解实现日志功能