@Aspect注解将表示它是一个切面
@Component表示它是一个Spring的组件
切片Aspect,既然Spring那么支持AOP,就肯定都能拿。有人会问如何拿原始的HTTP请求和响应的信息,通过以下代码应该拿得到啊哈哈哈哈
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
1 | xml复制代码<aop:config> |
其中aop:aspect/标签就是切面,此标签下面的aop:around/、aop:before/这些就是增强处理,那么在哪里进行增强处理呢?pointcut属性就定义了切入点,也就是在哪里进行增强处理。这里的表达式比如execution(* com.wangjun.aop.xml..(..))含义如下:
指定在com.wangjun.aop.xml包中任意类方法;
第一个表示返回值不限,第二个表示类名不限;
第三个*表示方法名不限,圆括号中的(..)表示任意个数、类型不限的形参。
使用场景
日志记录、审计、声明式事务、安全性和缓存等。
AspectJ和Spring AOP的区别
正好代表了实现AOP的两种方式:
AspectJ是静态实现AOP的,即在编译阶段对程序进行修改,需要特殊的编译器,具有较好的性能;
Spring AOP是动态实现AOP的,即在运行阶段动态生成AOP代理,纯java实现,因此无需特殊的编译器,但是通常性能较差。
案例:记录日志
业务日志表
1 | typescript复制代码package chin.common; |
1 | java复制代码package chin.annotation; |
1 | java复制代码package chin.annotation; |
1 | ini复制代码package chin.aspect; |
本文转载自: 掘金