zoukankan      html  css  js  c++  java
  • spring基础知识(三)

    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);
        }
    }

    测试结果

  • 相关阅读:
    C#设计模式学习笔记-单例模式
    面向对象的七种设计原则
    继承 示例1
    继承和多态的那些事
    体检套餐管理项目
    魔兽登录系统
    清空表
    mysql批量插入
    mkdir用大括号同时建立多个同级和下级目录
    linux查看机器位数
  • 原文地址:https://www.cnblogs.com/hudj/p/6861829.html
Copyright © 2011-2022 走看看