Spring AOP之@AspectJ

@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开发大全》

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容