@AspectJ是用于切面的Java注解,spring5使用了与AspectJ5相同的切入点解析和匹配的注解,但AOP运行时仍然是springAOP,并不依赖于AspectJ编译器。
1、启用@AspectJ
可以通过XML或Java配置来启用@AspectJ支持,但要确保AspectJ的aspectjweaver.jar在应用程序的类路径中。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.1.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.1.8.RELEASE</version>
</dependency>
示例:使用@Configuration和@EnableAspectJAutoProxy注解来启用@AspectJ。
@EnableAspectJAutoProxy
@Configuration
public class AppConfig {}
XML配置:
<aop:aspectj-autoproxy/>
2、声明AspectJ
在启用@AspectJ注解的情况下,在应用上下文中定义的任意带有@AspectJ注解的切面bean,都将被spring自动识别并用于配置springAOP。
定义一个最小切面3、声明Pointcut
springAOP只支持bean方法执行连接点操作,可以把切入点看作匹配bean的方法执行。
一个切入点的声明包含两部分:
1)包含名称和任意参数的签名
2)切入点表达式,该表达式决定了执行哪个方法
在@AspectJ中,一个切入点就是一个普通的方法定义提供的签名。切入点表达式用@Pointcut注解表示,此方法的返回值必须为void。
切入点表达式可以使用“&&”、“||”、“!”,或通过名称来引入。示例如下:
@Pointcut("execution(public * *(..))") //匹配任何public方法
public void oper() {}
@Pointcut("within(com.abc.spring.user.. *)") //匹配user模块中的方法
public void inUser() {}
@Pointcut("oper() && inUser()") //匹配user模块中的任何public方法
public void getUser() {}
综合示例:
定义业务模型People 定义切面Talk spring配置 定义入口Application 运行结果--参考文献《Srping5开发大全》
网友评论