一、Spring AOP基本概念
1)是一种动态编译期增强性AOP的实现
2)与IOC进行整合,不是全面的切面框架
3)与动态代理相辅相成
4)有两种实现:基于jdk动态代理、cglib
2020整理收集的一些面试题(都整理成文档),有很多干货,包含mysql,netty,spring,线程,spring cloud等详细讲解,也有详细的学习规划图,面试题整理等,我感觉在面试这块讲的非常清楚 :
获取面试资料只需:点击这里领取!!!暗号:CSDN
二、JDK动态代理与Cglib的区别
1)jdk的动态代理需要实现接口 InvocationHandler
2)cglib无需实现接口,使用字节码技术去修改class文件使继承
3)spring默认使用jdk动态代理,如果没有实现接口会使用cglib
二、Spring AOP与AspectJ区别
Spring的AOP是基于动态代理的,动态增强目标对象,而AspectJ是静态编译时增强,需要使用自己的编译器来编译,还需要织入器
使用AspectJ编写的java代码无法直接使用javac编译,必须使用AspectJ增强的ajc增强编译器才可以通过编译,写法不符合原生Java的语法;而Spring AOP是符合Java语法的,也不需要指定编译器去编译,一切都由Spring 处理。
四、AOP使用流程
1)定义业务组件
2)定义切点(重点)
3)定义增强处理方法(切面方法)
五、Spring下的jar包依赖(以jdk1.8为例)
aspectjweaver-1.8.9.jar
aspectjrt-1.8.9.jar
aopalliance-1.0.jar
spring-aop-4.3.7.RELEASE.jar
六、代码实现过程
(一)、spring-mvc.xml配置
1)、声明
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201217202032578.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MDkxNzQ0OQ==,size_16,color_FFFFFF,t_70)
2)开启注解
<mvc:annotation-driven />
3)开启控制层的扫描范围,自动扫描通过注解配置的组件
<context:component-scan base-package="com.xxxx.util.web.controller" />
4)启动对@AspectJ注解的支持
<aop:aspectj-autoproxy proxy-target-class="true" />
proxy-target-class默认是false:如果类实现了接口就走JDK代理,如果没有,走cglib代理
true:是强制使用cglib代理
5)切面Bean
<bean id="logAopController"
class="com.xxxx.util.web.controller.LogAopController">
</bean>
(二)、切面代码
LogAopController.java
import java.lang.reflect.Method;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.ejb.EJB;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
@Component
@Aspect
public class <