spring基础知识——aop

Posted 虫儿aqa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring基础知识——aop相关的知识,希望对你有一定的参考价值。

spring基础知识(三)——aop面向切面编程


 

1、概念术语  

  aop面向切面编程(Aspect ariented Programming)

  在开始之前,需要理解Spring aop 的一些基本的概念术语(总结的个人理解,并非Spring官方定义):

  切面(aspect):用来切插业务方法的类。

  连接点(joinpoint):是切面类和业务类的连接点,其实就是封装了业务方法的一些基本属性,作为通知的参数来解析。

  通知(advice):在切面类中,声明对业务方法做额外处理的方法。

  切入点(pointcut):业务类中指定的方法,作为切面切入的点。其实就是指定某个方法作为切面切的地方。

  目标对象(target object):被代理对象。

  AOP代理(aop proxy):代理对象。

  通知:

  前置通知(before advice):在切入点之前执行。

  后置通知(after returning advice):在切入点执行完成后,执行通知。

  环绕通知(around advice):包围切入点,调用方法前后完成自定义行为。

  异常通知(after throwing advice):在切入点抛出异常后,执行通知。

导入相关jar包http://pan.baidu.com/s/1o7VLcFo

下面一个测试小案列

src目录如下

 

新建个类 Banboo.java

package aop.classes;

public class Banboo {
     public void testBanboo(String name){
         System.out.println("测试类方法1...");
     }
    
     
     private void testBanBoo(){
         System.out.println("测试类方法2,大写...");
     }
}

 

 切面类Cutor

package aop.aspect;

public class Cutor {
    public void addLogs(){
        System.out.println("在方法前面...添加相应的日志记录....");
    }
    
    
    public void  endAddLogs(){
        System.out.println("在方法最后,添加相应的日志记录....");
    }
}

 

配置xml文件

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

     <bean id="cc" class="aop.classes.Car"></bean>
    <bean id="bb" class="aop.classes.Banboo"></bean>
    
    
    <bean id="cutor" class="aop.aspect.Cutor"></bean>
    <aop:config>
      <aop:aspect id="mylog" ref="cutor" order="1">
          <aop:pointcut id="testcut" expression="execution( void aop.classes.*.test*(..))"/>  
          <aop:pointcut id="banboocut" expression="execution(* aop.classes.Banboo.*(..))"/>   
          <aop:pointcut id="noParmCut" expression="execution(* aop.classes.*.*())"/>
          <aop:before pointcut-ref="testcut" method="addLogs"/>
          <aop:after pointcut-ref="banboocut" method="endAddLogs"/>
      </aop:aspect>
    </aop:config>

</beans>

 

测试类 

package aop.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import aop.classes.Banboo;


public class Test {
    public static void main(String[] args) {
        ApplicationContext ac = new  ClassPathXmlApplicationContext("applicationContext.xml");
        
         Banboo bb =(Banboo)ac.getBean("bb");
         bb.testBanboo(null);
    }
}

 

测试结果

 

以上是关于spring基础知识——aop的主要内容,如果未能解决你的问题,请参考以下文章

Spring基础之AOP

阿里四面:你知道Spring AOP创建Proxy的过程吗?

spring aop中this和target区别

Spring基础系列Spring AOP基础

Spring AOP基础实践

Web基础之Spring AOP与事务