• AOP在spring中的使用(基于注解的方式)


     AOP在spring中的实现有两种方式:

            一种是基于xml配置文件的方式(前面一篇博客中已经进行了编码,博客地址:Spring的前置增强,后置增强,异常抛出增强、自定义增强_网恋褙骗八万的博客-CSDN博客

            另一种方式是基于注解的方式(在此只编码了前置增强,其余增强类似)

    目录结构:

    目录

    1、创建maven工程

    2、在pom.xml文件中添加相关依赖

    3、在类上添加注解

    4、创建spring配置xml文件bean1.xml,在配置文件中开启注解扫描,以及开始Aspect生成代理对象

    5、在test包下编写测试类

    6、得到测试运行结果


    1、创建maven工程

            创建 User类(被增强类)、UserProxy类(增强类)

    1. package com.atguigu.aopanno;
    2. import org.springframework.stereotype.Component;
    3. /**
    4. * @Author 不要有情绪的 ljy
    5. * @Date 2022/9/19 15:30
    6. * @Description:
    7. */
    8. //被增强类
    9. @Component
    10. public class User {
    11. public void add() {
    12. System.out.println("add方法执行......");
    13. }
    14. }

    1. package com.atguigu.aopanno;
    2. import org.aspectj.lang.annotation.Aspect;
    3. import org.aspectj.lang.annotation.Before;
    4. import org.springframework.stereotype.Component;
    5. /**
    6. * @Author 不要有情绪的 ljy
    7. * @Date 2022/9/19 15:31
    8. * @Description:
    9. */
    10. //增强类
    11. @Component
    12. @Aspect
    13. public class UserProxy {
    14. //前置通知
    15. @Before(value = "execution(* com.atguigu.aopanno.User.add(..))")
    16. public void before() {
    17. System.out.println("before方法执行......");
    18. }
    19. }

    2、在pom.xml文件中添加相关依赖

    1. "1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    5. <modelVersion>4.0.0modelVersion>
    6. <groupId>com.examplegroupId>
    7. <artifactId>learnForSpring5_demo4artifactId>
    8. <version>1.0-SNAPSHOTversion>
    9. <dependencies>
    10. <dependency>
    11. <groupId>org.aspectjgroupId>
    12. <artifactId>aspectjweaverartifactId>
    13. <version>1.6.8version>
    14. dependency>
    15. <dependency>
    16. <groupId>org.springframeworkgroupId>
    17. <artifactId>spring-contextartifactId>
    18. <version>5.3.22version>
    19. dependency>
    20. <dependency>
    21. <groupId>org.springframeworkgroupId>
    22. <artifactId>spring-aopartifactId>
    23. <version>5.3.22version>
    24. dependency>
    25. <dependency>
    26. <groupId>junitgroupId>
    27. <artifactId>junitartifactId>
    28. <version>4.12version>
    29. <scope>compilescope>
    30. dependency>
    31. dependencies>
    32. <build>
    33. <plugins>
    34. <plugin>
    35. <groupId>org.apache.maven.pluginsgroupId>
    36. <artifactId>maven-compiler-pluginartifactId>
    37. <version>3.1version>
    38. <configuration>
    39. <source>1.8source>
    40. <target>1.8target>
    41. configuration>
    42. plugin>
    43. plugins>
    44. build>
    45. project>

    3、在类上添加注解

            注解已经在类编写中进行了添加(1中)

    4、创建spring配置xml文件bean1.xml,在配置文件中开启注解扫描,以及开始Aspect生成代理对象

    1. "1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xmlns:context="http://www.springframework.org/schema/context"
    5. xmlns:aop="http://www.springframework.org/schema/aop"
    6. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    7. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
    8. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
    9. <context:component-scan base-package="com.atguigu.aopanno">context:component-scan>
    10. <aop:aspectj-autoproxy>aop:aspectj-autoproxy>
    11. beans>

    5、在test包下编写测试类

    1. package com.atguigu.test;
    2. import com.atguigu.aopanno.User;
    3. import org.junit.Test;
    4. import org.springframework.context.ApplicationContext;
    5. import org.springframework.context.support.ClassPathXmlApplicationContext;
    6. /**
    7. * @Author 不要有情绪的 ljy
    8. * @Date 2022/9/19 16:03
    9. * @Description:
    10. */
    11. public class AopTest {
    12. @Test
    13. public void test(){
    14. ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
    15. User user = context.getBean("user", User.class);
    16. user.add();
    17. }
    18. }

    6、得到测试运行结果

    1. "C:\Program Files\Java\jdk1.8.0_341\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:E:\idea\IntelliJ IDEA 2020.2.4\lib\idea_rt.jar=64291:E:\idea\IntelliJ IDEA 2020.2.4\bin" -Dfile.encoding=UTF-8 -classpath "E:\idea\IntelliJ IDEA 2020.2.4\lib\idea_rt.jar;E:\idea\IntelliJ IDEA 2020.2.4\plugins\junit\lib\junit5-rt.jar;E:\idea\IntelliJ IDEA 2020.2.4\plugins\junit\lib\junit-rt.jar;C:\Program Files\Java\jdk1.8.0_341\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_341\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_341\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_341\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_341\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_341\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_341\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_341\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_341\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_341\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_341\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_341\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_341\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_341\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_341\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_341\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_341\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_341\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_341\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_341\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_341\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_341\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_341\jre\lib\rt.jar;D:\ajavaproject\coding\learnForSpring5_demo4\target\classes;C:\Users\qrs-ljy\.m2\repository\junit\junit\4.12\junit-4.12.jar;C:\Users\qrs-ljy\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\qrs-ljy\.m2\repository\org\aspectj\aspectjweaver\1.6.8\aspectjweaver-1.6.8.jar;C:\Users\qrs-ljy\.m2\repository\org\springframework\spring-context\5.3.22\spring-context-5.3.22.jar;C:\Users\qrs-ljy\.m2\repository\org\springframework\spring-beans\5.3.22\spring-beans-5.3.22.jar;C:\Users\qrs-ljy\.m2\repository\org\springframework\spring-core\5.3.22\spring-core-5.3.22.jar;C:\Users\qrs-ljy\.m2\repository\org\springframework\spring-jcl\5.3.22\spring-jcl-5.3.22.jar;C:\Users\qrs-ljy\.m2\repository\org\springframework\spring-expression\5.3.22\spring-expression-5.3.22.jar;C:\Users\qrs-ljy\.m2\repository\org\springframework\spring-aop\5.3.22\spring-aop-5.3.22.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 com.atguigu.test.AopTest,test
    2. before方法执行......
    3. add方法执行......
    4. Process finished with exit code 0

    学习之所以会想睡觉,是因为那是梦开始的地方。
    ଘ(੭ˊᵕˋ)੭ (开心) ଘ(੭ˊᵕˋ)੭ (开心)ଘ(੭ˊᵕˋ)੭ (开心)ଘ(੭ˊᵕˋ)੭ (开心)ଘ(੭ˊᵕˋ)੭ (开心)
                                                                                                         ------不写代码不会凸的小刘

  • 相关阅读:
    Golang 实现 websocket 通讯(一个服务器,两个客户端)
    微信小程序有的机型无法播放m3u8格式的直播流,使用H5在微信环境里播放
    【JAVA】AJAX&JSON
    【每日一读】Sampling Multiple Nodes in Large Networks: Beyond Random Walks
    Docker 进阶指南(上)- 使用Dockerfile自定义镜像
    SpringBoot相关
    [附源码]java毕业设计社区生鲜仓库管理系统
    大学生职业生涯规划包word,ppt模板以及必备素材
    利用CloudCompare进行点云过滤去噪(统计滤波)
    qt实现自定义菜单
  • 原文地址:https://blog.csdn.net/qq_40834643/article/details/126936431