spring之AOP学习(1)

2018-08-06  本文已影响0人  sywaj

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方法

上一篇下一篇

猜你喜欢

热点阅读