美文网首页
Spring AOP之@AspectJ

Spring AOP之@AspectJ

作者: 夏与清风 | 来源:发表于2019-07-22 16:55 被阅读0次

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

    相关文章

      网友评论

          本文标题:Spring AOP之@AspectJ

          本文链接:https://www.haomeiwen.com/subject/ptqflctx.html