zoukankan      html  css  js  c++  java
  • 02.Spring5.x Aop

    第一章:Spring AOP

    Aop面向切面编程

    1. 新建一个空的 Java maven项目,命名为【spring01】

    2. 修改pom.xml文件,增加如下依赖

    <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
    
            <spring.version>5.2.5.RELEASE</spring.version>
            <aopalliance.version>1.0</aopalliance.version>
            <aspectj.weaver>1.9.2</aspectj.weaver>
        </properties>
    
        <dependencies>
            <!-- spring -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-expression</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
    
            <!--切入点表达式的支持-->
            <dependency>
                <groupId> org.aspectj</groupId>
                <artifactId> aspectjweaver</artifactId>
                <version>1.6.11</version>
            </dependency>
    
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.13</version>
            </dependency>
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter-api</artifactId>
                <version>RELEASE</version>
                <scope>compile</scope>
            </dependency>
    
            <dependency>
                <groupId>com.aliyun</groupId>
                <artifactId>aliyun-java-sdk-core</artifactId>
                <version>4.5.3</version>
            </dependency>
        </dependencies>

    3.创建通知类

    public class MyAspject {
    
        public void before() {
            System.out.println("前置通知");
        }
        public Object around(ProceedingJoinPoint j) {
    
            Object proceed = null;
            try {
                System.out.println("前置通知");
                proceed = j.proceed();
                System.out.println("后置通知");
                return proceed;
            } catch (Throwable throwable) {
                System.out.println("异常通知");
                throwable.printStackTrace();
            }finally{
                System.out.println("最终通知");
            }
            return proceed;
        }
    
    }

    4.创建applicationContext配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/context
           https://www.springframework.org/schema/context/spring-context.xsd
           http://www.springframework.org/schema/tx
           http://www.springframework.org/schema/tx/spring-tx.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop.xsd">
    
        <bean id="userDao" class="club.gskj.dao.impl.UserDaoImpl"></bean>
        <bean id="aspject" class="club.gskj.aspject.MyAspject"></bean>

    <!--配置 切面-->
    <aop:config>
    <!--切入点表达式-->
    <aop:pointcut id="point" expression="execution(* club.gskj.dao..*.*(..))"/>
    <!--切入点-->
    <aop:aspect ref="aspject">
    <aop:before method="before" pointcut-ref="point"/>
    <aop:around method="around" pointcut-ref="point" arg-names="j"/>
    </aop:aspect>
    </aop:config>
    </beans>

    5.测试类

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = "classpath:applicationContext.xml")
    public class AspectTest {
    
        @Autowired
        UserDao userDao;
    
        @Test
        public void teset1() {
            userDao.add();
        }
    }

    Aop面向切面编程,anno注解模式

    1. 通知类

    @Aspect
    @Component
    public class MyAspject2 {
    
        @Pointcut(value = "execution(* club.gskj.dao..*.*(..)))")
        public void pointCut() {
        }
    
        @Before(value = "pointCut()")
        public void before() {
            System.out.println("前置通知");
        }
    
        @Around(value = "pointCut()")
        public Object around(ProceedingJoinPoint j) {
    
            Object proceed = null;
            try {
                System.out.println("前置通知 anno");
                proceed = j.proceed();
                System.out.println("后置通知 anno");
                return proceed;
            } catch (Throwable throwable) {
                System.out.println("异常通知 anno");
                throwable.printStackTrace();
            } finally {
                System.out.println("最终通知 anno");
            }
            return proceed;
        }
    }

    2. applicationContext配置

     
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    https://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd">

    <bean id="userDao" class="club.gskj.dao.impl.UserDaoImpl"></bean>
    <bean id="aspject" class="club.gskj.aspject.MyAspject"></bean>


    <!--开启 aop 自动注解-->
    <aop:aspectj-autoproxy/>
    <!--开启扫描包-->
    <context:component-scan base-package="club.gskj"/>
    </beans>
    
    

    3.测试类测试

      • 总结:

      • aop面向切面编程。重点在于使用的是 动态代理模式。在不改变源代码的基础上,对方法进心再次加强

  • 相关阅读:
    数据分析2 numpy(ndarray数组,属性,创建,索引切片,运算,函数,随机数), Pandas(Series[创建,series数据对齐(相加),缺失值处理,特性,索引[整数索引loc和iloc]],DataFrame[索引与切片, 常用属性,数据对齐(相加),缺失值处理,常用方法],时间对象,时间序列), dateutil时间处理
    数据分析1 ipython, jupyter notebook(快捷键), anaconda软件
    CMDB4 总结CMDB,数据展示前后端不分离(xadmin第二种安装方法),前后端分离(vue-element-admin,iview-admin), 画图工具(highcharts,echarts,antv)
    CMDB3 完善采集端代码(ssh方案的多线程采集), 异常处理, 服务端目录结构的设计(django的app), API数据分析比对入库
    CMDB2 采集客户端目录架构设计, 高级配置文件, 可插拔式的采集
    CentOS, CMDB1 Linux命令补充(netstat,ps,kill,service,systemctl,top,wget,Irzsz,vim,磁盘使用情况,cpu情况,tree,history),linux常见的面试题, CMDB
    CentOS centos7的目录结构, 文件系统常用命令(pwd,cd,mkdir,touch,ls,cat,echo,cp,mv,rm), vim编辑器
    CentOS VMware安装CentOS7,配置网卡文件,Xshell5连接,快照,克隆,修改主机名
    flask框架4 表单验证, 表单查询wtforms,flask-migrate
    flask框架3 local对象补充,偏函数,请求上下文,g对象,flask-session组件,flask的信号,自定义信号(了解),用命令启动flask项目(flask-script)
  • 原文地址:https://www.cnblogs.com/mt-blog/p/13492886.html
Copyright © 2011-2022 走看看