Spring AOP 使用步骤:
1、导入包:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
导入@Aspect包
2、创建切面组件,封装横切关注点代码(如:用户行为日志追踪)
3、标注通知@Before()//方法之前,同理@After()//方法之后
4、标注切入点”bean(userServiceipml)“
5、在切面中获取用户调用的方法:连接点(joinPoint)
6、日志的配置文件
@Aspect //切面组件,注Aspect(org.aspectj.lang.annotation.Aspect;)
@Component //表示是一个组件,一个配置类(组件扫描,自动创建)
注:@Before //方法之前通知||同理@After()//方法之后
注:@bean(userServiceimpl)//找到一个java Bean(userServiceimpl)在这个bean方法执行之前先执行被@Before注释的类,每次执行"userServiceimpl"类之前,都先执行方法↓
注:方法如何获取???
方法的参数joinPoint连接点,joinPoint有一个方法叫signature
注:signature// name:签名,方法的签名
什么是方法的签名?
方法名+方法的参数 = 方法签名 (方法的签名在java的反射包里面没有定义这么一个类),
Spring AOP专门为”方法的签名“定义了一个叫 Signature的一个类
注:signature// 方法名+方法的参数 = 方法签名
注:userServiceimp类调用那个方法那么就会把this方法传给joinpoint去执行,被传过来的userServiceimp某个方法就被称为 ”方法的签名“ ,总而言之,言而总之.....你调用的那个方法,那么该方法就是 ”方法的签名“
用Logger对象或者用@SLF4J注解其实差不多,只是SLF4J帮我写了Logger日志的对象,然而对项目的内存会占用一些内存会导致项目会慢一点点,用Logger对象还是用@SLF4J注解完全凭个人喜好
注:Joinpoint包为
注:Signature包
注:一定要加上Before("bean(**类名**)"),否则不会工作
/** * 通知(切入点) * @Before("bean(userServiceImpl)") * 在切入点之前执行:userServiceImpl对象的全部方法之前执行 */
备注一下:{}是函数的占位符
Spring AOP 切面,可以用这个东西举一反三
@Before//方法执行之前
@After//方法执行之后,无论是否有异常都会执行
@AfterReturning//方法正常结束后执行
@AfterThrowing//方法异常时之后执行
这四种都可以接收joinpoint连接点,都代表被调用的方法
完结!