Spring框架之通知类型

继上一篇的知识:接下来就根据下面这张图的,UserDao类的增、删、改、查方法,来进行对Spring通知的了解。

Spring框架之通知类型_第1张图片

一、 Spring通知类型

1.1、前置通知:在目标方式执行之前的操作        获得切入点的信息
        如:         
                        
                               
                       

    1.2、后置通知:在目标方式执行之后的操作        获得方法的返回值

    1.3、环绕通知:在目标方式执行之前和之后的操作           可以阻止目标方法的执行,性能监控
    1.4、异常抛出通知:在程序出现异常的时候,进行的操作
            事务管理,事务开始、事务终止、事务异常
    1.5、最终通知:无论代码是否异常,总会执行
    1.6、引入通知:(了解)

二、AOP的开发(基于AspectJ的XML方式)

步骤:1、引入jar包 
                  基本开发包
                  AOP的包(aop、aspects、expression、aspectj[依赖包])
          2、创建XML文件,引入约束(:the aop schema ..............方法参见he context schema约)
          3、编写目标类。增强(save、find、delete、update方法)
          4、编写测试类   (介绍一个单元测试的方法............)

说明:对于ProductDao及ProductDaoImpl类的创建和实现参考上一篇

2、创建applicationContext.xml  文件

 
        

        
        
        

        
        
        
                
                
                
                
                
                
                
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                
        

3、编写目标类。

             略......................

4、增强(save、find、delete、update方法),基于AspectJ的方式,创建MyAspectXML类实现这些功能,而实现这些方法的关键就是实现对它的配置;

public class MyAspectXML {
    /*=====================前置通知========================*/
    public void checkProxy(JoinPoint joinPoint){
        System.out.println("权限校验............."+joinPoint);
    }
    /*======================后置通知=======================*/
    public void writeLog(Object result){
        System.out.println("日志记录............."+result);
    }
    /*====================== 性能监控=======================*/
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("环绕前通知===========");
        Object obj = joinPoint.proceed();
        System.out.println("环绕后通知===========");
        return obj;
    }
    /*=====================异常抛出通知=========================*/
    public void afterThrowing(Throwable ex){
        System.out.println("异常抛出通知============="+ex.getMessage());
    }

    /*=========================最终通知========================*/
    public void after(){
        System.out.println("最终通知===========");
    }
}

5、测试类        略...........................

 三、2、Spring的切入点表达式的写法

   
    基于一个execution的方法执行
    语法:【访问修饰符】  方法的返回值  包名.类名.方法名(参数)
        public void com.dao.userDao.save(..)    特定方法的增强
    *       :星号任意
    * com.com.dao.userDao+save(..)    表示当前类和子类都可以增强    
    * com.com.dao.userDao.*.*        表示这个包类的所有方法增

 

你可能感兴趣的:(Spring学习)