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

    测试结果

  • 相关阅读:
    aspnet mvc 中 跨域请求的处理方法
    Aspnet Mvc 前后端分离项目手记(三)关于restful 风格Url设计
    Aspnet Mvc 前后端分离项目手记(二)关于token认证
    Aspnet Mvc 前后端分离项目手记(一) 关于跨域问题(还有前言)
    31 | 误删数据后除了跑路,还能怎么办?
    30 | 答疑文章(二):用动态的观点看加锁
    29 | 如何判断一个数据库是不是出问题了?
    28 | 读写分离有哪些坑?
    27 | 主库出问题了,从库怎么办?
    26 | 备库为什么会延迟好几个小时?
  • 原文地址:https://www.cnblogs.com/hudj/p/6861829.html
Copyright © 2020-2023  润新知