Spring系列之 (十六):利用Spring AOP和自定义注解实现日志功能
Spring AOP的主要功能相信大家都知道,日志记录、权限校验等等。
用法就是定义一个切入点(Pointcut),定义一个通知(advice),然后设置通知在该切入点上执行的方式(前置、后置、环绕等),切点可以是注解
基于AsjectJ框架(注解方式)和自定义注解的支持
步骤:
1.在spring.xml中配置相关参数
2.创建自定义注解
3.定义一个切面类
4.在controller类方法中,使用
1.在spring.xml中配置相关参数
1.自动扫描包和启用@AsjectJ注解的支持
2.创建自定义注解
@Target、@Retention、@Inherited、@Documented为元注解(meta-annotation),它们是负责注解其他注解的。
-
Target:指明注解支持的使用范围,取值可以参考枚举ElementType,以下:
- ElementType.TYPE //类、接口、枚举
- ElementType.FIELD //属性
- ElementType.METHOD //方法
- ElementType.PARAMETER //参数
- ElementType.CONSTRUCTOR //构造器
- ElementType.LOCAL_VARIABLE //局部变量
- ElementType.ANNOTATION_TYPE //注解
- ElementType.PACKAGE //包
-
Retention:指明注解保留的的时间长短,取值参考枚举RetentionPolicy,一下:
- SOURCE //源文件中保留
- CLASS //class编译时保留
- RUNTIME //运行时保留
- Inherited:指明该注解类型被自动继承。如果一个annotation注解被@Inherited修饰,那么该注解作用于的类 的子类也会使用该annotation注解。
- Documented:指明拥有这个注解的元素可以被javadoc此类的工具文档化。
3.定义一个切面类
因篇幅问题,省去其他方法,如
[email protected](pointcut = "controllerAspect()")
public void doAfter(JoinPoint joinPoint)
[email protected]("controllerAspect()")
public void afterReturn(JoinPoint joinPoint)
在切面类中,也可以编写添加日志表的操作代码(自由发挥)
4.在controller类中测试