编程开发 > JAVA > 文章内容

java基础知识总结(192)

2016-10-11编辑:ljnbset

1.AOP的概念及优点

  Aspect Oriented Programming面向方面编程.

  面对象编程的关注点是对象,面向方面编程以面向对象编程为基础,关注点是切面,切面组件可以作用在若干目标对象的方法上,封装了具有通用性的一些处理.例如日志记录,事务处理,异常处理等等.

  面向方面编程优点:将共通处理封装成了一个独立组件,利用配置形式作用在了某一批目标对象上,实现组件的重复利用,将切面和目标对象解耦,实现了低耦合应用.

   *a.切面(Aspect)

     封装了共通处理的组件,可用于切入到目标对象的处理方法中

   *b.切入点(Pointcut)

     用于指定目标对象和方法的一个表达式.是连接点的集合.

     连接点是切面组件与某一个目标对象方法的作用点,例如方法调用和异常发生

   *c.通知(Advice)

     用于指定切面功能切入目标对象方法的位置.例如切入到目标方法调用之前,目标方法调用之后等.

     通知类型:前置通知,后置通知,环绕通知,最终通知,异常通知

     try{

        //执行前置通知

        //执行环绕通知--前置

        执行目标对象方法

        //执行环绕通知--后置

        //执行后置通知

     }catch(Exception ex){

        //执行异常通知

     }finally{

        //执行最终通知

     }

 

   d.目标对象(Target)

     需要使用切面功能的,被切入的Bean对象.使用切入点表达式指定

   e.动态代理(AutoProxy)

     在Spring采用了AOP之后,从容器取出的目标对象是一个动态代理类型,调用代理对象方法时,代理对象会调用切面功能和目标对象功能.

     动态代理类生成技术:

      有接口的目标对象采用JDK Proxy技术.

      没有接口的目标对象采用CGLIB技术.

2.切入点表达式的定义

   1)方法限定execution

      execution(修饰符? 返回类型 方法名(参数类型) throws 异常?) 

     a.匹配com.tarena.UserDAO的save()方法

       execution(* com.tarena.UserDAO.save(..))

     b.匹配com.tarena.UserDAO的所有方法

       execution(* com.tarena.UserDAO.*(..))

     c.匹配com.tarena.UserDAO的所有public void方法

       execution(public void com.tarena.UserDAO.*(..))

     d.匹配com.tarena包下所有类型的所有方法

       execution(* com.tarena.*.*(..))

     e.匹配com.tarena包下及其子包所有类型的所有方法

       execution(* com.tarena..*.*(..))

     f.匹配UserDAO中有一个参数并且是String类型的方法

       execution(* com.tarena.UserDAO.*(java.lang.String))

  2)类型限定within

    within(类型)

    a.匹配com.tarena.UserDAO的所有方法

       within(com.tarena.UserDAO)

    b.匹配com.tarena包下的所有类的所有方法

      within(com.tarena.*)

    c.匹配com.tarena包下及其子包的所有类的所有方法

      within(com.tarena..*)

  3)id名限定bean

     bean(idOrName属性值)

    a.匹配容器中所有id或name属性值以dao结尾的bean对象

       bean(*dao)

java基础知识总结(191)

热点推荐

登录注册
触屏版电脑版网站地图