spring之AOP学习(1)

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包,具体如下


    spring之AOP学习(1)_第1张图片
    image.png

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



 

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操作了



        
        
        
        
        
            
        
        
              
        
        
        
            
        
               
                
        

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

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();
    }
}
spring之AOP学习(1)_第2张图片
测试结果

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

你可能感兴趣的:(spring之AOP学习(1))