美文网首页
spring之AOP学习(1)

spring之AOP学习(1)

作者: sywaj | 来源:发表于2018-08-06 20:16 被阅读0次

    AOP:面向切面编程,是OOP(面向对象编程)的延续。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码。

    aop底层使用动态代理实现

    1. 第一种情况,有接口情况,使用动态代理创建接口实现类代理对象。
    2. 没有接口情况,使用动态代理创建类的子类代理对象

    AOP的操作术语

    Joinpoint(连接点):指类里面可以被增强的方法,这些方法被称为连接点
    Pointcut(切入点):指在类里面被实际增强的方法
    Advice(增强/通知):增强到具体切入点的逻辑,比如扩展日志功能,这个日志功能被称为增强。其中通知可分为

    • 前置通知:在方法之前执行
    • 后置通知:在方法之后执行
    • 异常通知:方法出现异常
    • 环绕通知:在方法之前后之后执行
    • 最终通知:在后置之后执行

    spring的AOP操作

    在spring里面进行AOP操作,使用aspectj实现,注意:
    1.aspectj不是spring的一部分,它和spring一起使用进行aop操作
    2.使用aspectj有两种操作手段,一是基于aspectj的xml配置,二是基于aspectj的注解方式

    AOP的操作准备

    1. 除了导入基本的jar包之外,还需导入aop相关的jar包,具体如下


      image.png

      2.创建spring核心配置文件,引入aop约束

    <?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:aop="http://www.springframework.org/schema/aop" xsi:schemaLo3cation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
     </beans>
    

    2.创建2个JavaBean


    bean
    package cn.sxj.spring.bean;
    
    public class Book {
    
        public void read() {
            System.out.println("读书好");
        }
    }
    
    package cn.sxj.spring.bean;
    
    public class MyBook {
    
        public void add() {
            System.out.println("添加这个功能到Book的read方法");
        }
    }
    

    3.然后就可以在配置文件里面进行ao'p操作了

    <?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: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/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
            
           <!-- 配置对象 --> 
            <bean name="book" class="cn.sxj.spring.bean.Book"></bean>
            <bean name="myBook" class="cn.sxj.spring.bean.MyBook"></bean>
            <!-- 配置aop操作 -->
                
            <aop:config>
            <!-- 配置切入点 -->
                <aop:pointcut expression="execution(* cn.sxj.spring.bean.Book.*(..))" id="pointcut1"/>  
            <!-- 配置切面,把增强用到方法上面 -->
            <aop:aspect ref="myBook">
            <!-- 配置增强类型 -->
                <aop:before method="add" pointcut-ref="pointcut1"/>
            </aop:aspect>
            </aop:config>       
                    
            </beans>
    

    最后我们写一个测试文件测试一下

    package cn.sxj.spring.test;
    
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import cn.sxj.spring.bean.Book;
    
    public class Test01 {
        
        @Test
        public void testService() {
            ApplicationContext context = 
                new ClassPathXmlApplicationContext("applicationContext.xml");
            Book book = (Book) context.getBean("book");
            book.read();
        }
    }
    
    测试结果

    从测试结果我们可以发现,add方法成功添加到了read方法

    相关文章

      网友评论

          本文标题:spring之AOP学习(1)

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