zoukankan      html  css  js  c++  java
  • 三、面向切面编程(11~16)

    第八讲  面向切面编程--aop

    课时11、12  aop简介+使用springAPI实现aop

    1、aop:aspect oriented programming 面向切面编程

    2、aop在spring中作用

      提供声明式事务服务(声明式事务)

      允许用户实现自定义切面

    3、aop:在不改变原有代码的情况下增加新的功能。

      传统的编程模式:

    Aop的编程模式:横向的编程

    aop的好处:(代理的好处就是aop的好处)

      a)使得真实角色处理的业务更加纯粹,不再去关注一些公共的事情。

      b)公共的业务由代理来完成---实现业务的分工

      c)公共业务发生扩展时变得更加集中和方便

    4、名词解释

          关注点:增加的某个业务。如日志,安全,缓存,事务,异常处理等。(例:在前面代码的代理类的方法中增加了log();方法,那么这个方法就是一个关注点,对于这个方法我们有更好的处理,下面~~)

       切面(Aspect):一个关注点的模块化。(上面log()算是一个日志关注点,但是这个关注点,我们可以将这个方法封装到一个类里面,形成切面,因为可能在方法前面和方法后面都要使用这个方法)

       连接点:连接点表示一个方法的执行,切面在连接点上切入(如:add(); delete(); update(); select()方法是连接点)

       通知:在切面的某个特定的连接点上执行的动作是通知(其实这都是有迹可循的,例如log();是在目标方法执行前执行把它称为关注点,spring把它整理出来了前置通知,后置通知,异常通知,环绕通知,可以认为通知是一个特定的连接点)(也是一个过程,一个动作)

      目标对象:被代理的对象就叫目标对象(如前面写的推广到一般情况下的Object target)

      织入:把切面连接到其它应用程序类型或者对象上,并创建一个被通知的对象(有几种类型,上面).(其实是一个过程)

      综上,只有三个概念  1.关注点------模块化--->2.切面     3.连接点

      再综上,只有切面,连接点两个概念。

    5、使用spring实现aop

       第一种实现方式--通过springAPI来实现

    这个spring的aop项目结构如下,下面是代码

     Log.java---前置通知

    /**
     * 现在做的内容是实现spring的第一种实现aop的方式,spring有很多种实现aop的方式
     * spring里面有很多种通知类型
     * 1、拦截环绕通知(最基础通知类型) 切面 继承Interceptor类或实现MethodInterceptor接口
     *         需要导入aopalliance包,织入中的aspectjwaver包
     * 2、前置通知    (本次演示的内容)
     * 3、异常通知
     * 4、后置通知
     * 5、引入通知
     * 6、
     * 现在这个log就是单独提取出来的了,它就是一个关注点模块化,现在可以称之为切面
     * @author 2568833032
     *
     */
    public class Log implements MethodBeforeAdvice{
        /**
         * @param method 指的是被调用方法对象(相当于add(); update();delete();这些,就是切入点方法)
         * @param args 被调用的方法的参数
         * @target target 目标对象(被代理的目标对象,被调用方法的目标对象)
         * 在前置增强方法里面获取到这个方法信息
         * 下面要在applicationcontext.xml==beans.xml里面对其进行配置了aop的命名空间了
         */
        @Override
        public void before(Method method, Object[] args, Object target) throws Throwable {
    System.out.println(target.getClass().getName()+"的"+method.getName()+"方法被执行");
        }
    }

    AfterLog.java---后置通知

     * 这个类是为了做后置增强的演示的,相比Log类它实现了后置增强的接口
     */
    public class AfterLog implements AfterReturningAdvice{
        /**
         * 目标方法执行后执行的通知
         * @param returnValue 返回值
         * @param method 被调用的方法对象
         * @param args 被调用方法对象的参数
         * @param target 被调用的方法对象的目标对象
         */
        @Override
        public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
            System.out.println(target.getClass().getName()+"的"+method.getName()
            +"被成功执行,返回值是:"+returnValue);
            //现在后置通知的内容实现了,那么接下来在后面多加一个配置就可以了
        }
    }

    目标类-----连接点

    spring的配置文件beans.xml

    最后测试类代码

    课时13:aop再解释

     aop的重要性---很重要

    Spring aop就是将公共的业务(如日志、安全等)和领域业务结合。当执行领域业务(什么是领域业务?比喻我是干电信行业的,我是干金融的,不同的领域,也叫领域模型)时将会把公共业务加进来。实现公共业务的重复利用。领域业务更纯粹,程序员专注于领域业务。其本质还是动态代理(以后单独写aop的不太多)

    第二种方式实现aop:自定义类实现aop(课时14)

     本次项目的目录结构是

    log.java

    业务接口及其实现类没有改变,和上面代码一样

    配置文件

    测试类及测试结果

     

     第三种方式实现aop:通过注解来实现(AOPannotation)

     Log.java

    配置文件

    测试结果

    课时16:回顾

              补充一下异常通知

    实现ThrowsAdvice接口,这个接口有一个方法

    这个方法有一个参数带中括号,可以写可以不写,后面一个参数只要是一个throwable子类就可以了,前面方法写了就表示,对特定的方法发生了异常后后面异常类抛出的异常

  • 相关阅读:
    iOS新建项目基础设置
    Burp安装及配置(修改参数测试)
    打开他人代码,如何运行起来
    四、python用户交互程序
    三、python_字符编码与二进制
    二、python_变量要求
    一、python_(入门)
    linux 常用命令之一
    Atcoder Regular Contest 093 C
    「HNOI2016」序列
  • 原文地址:https://www.cnblogs.com/djlindex/p/11365877.html
Copyright © 2011-2022 走看看