zoukankan      html  css  js  c++  java
  • 经典aop,

    经典AOP
      代理工厂Bean  是一个类 ProxyFactoryBean
          前置增强 MethodBeforeAdvice
          后置增强 AfterReturingAdvice
          环绕增强 MethodInterceptor  熟悉
          异常增强 ThrowsAdvice  记录日志
         接口中没有方法,但是得实现afterThrows
         public void afterThrows( [Method method,] [Object args,] [Object target,] Throwable throwable );

    2.顾问(Advisor)
       通知Advice是Spring提供的一种切面(Aspect)。但其功能过于简单,只能
    将切面织入到目标类的所有目标方法中,无法完成将切面织入到指定目标方法中。

    顾问Advisor是Spring提供的另一种切面。其可以完成更为复杂的切面织入功能,能选择性的增强切面中的部分方法。
    PointcutAdvisor是顾问的一种,可以指定具体的切入点。顾问将通知进行了包装,
    会根据不同的通知类型,在不同的时间点,将切面织入到不同的切入点。
    PointcutAdvisor接口有两个较为常用的实现类:
     *:NameMatchMethodPointcutAdvisor 名称匹配方法切入点顾问
     *: RegexpMethodPointcutAdvisor 正则表达式匹配方法切入点顾问
          <property name="pattern" value=".*do.*"></property>  表示方法全名(包名,接口名,方法名)
        运算符       名称      意义
         .           点号       表示任意单个字符
         +           加号       表示前一个字符出现一次或者多次
         *           星号       表示前一个字符出现0次或者多次

      名称匹配方法切入点顾问  NameMatchMethodPointcutAdvisor
       <!-- 03.配置顾问   advisor 包装  advice-->
        <bean id="beforeAdvisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
          <property name="advice" ref="beforeAdvice"></property>
          <property name="mappedNames" value="do*"></property>
        </bean>
       
      正则匹配方法切入点顾问  RegexpMethodPointcutAdvisor

    3.两种自动代理实现
     =====默认Advisor自动代理生成器    
     注意:切面只能是顾问,对所有的对象都增强
     DefaultAdvisorAutoProxyCreator
         <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"></bean>

     =====BeanName自动代理生成器
     BeanNameAutoProxyCreator
        <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
          <property name="beanNames" value="someService"></property>
          <property name="interceptorNames" value="beforeAdvice"></property>
        </bean>

    4.AspectJ
      AspectJ是一个面向切面的框架
      传统AOP:Spring集成AspectJ
     
      无缝面向切面扩展的框架,横切关注点
      AspectJ(也就是AOP)的动机是发现那些使用传统的编程方法无法很好处理的问题。
      考虑一个要在某些应用中实施安全策略的问题。安全性是贯穿于系统所有模块间的问题,
      每个模块都需要应用安全机制才能保证整个系统的安全性,
      很明显这里的安全策略的实施问题就是一个横切关注点,
      使用传统的编程解决此问题非常的困难而且容易产生差错,
      这就正是AOP发挥作用的时候了。@AspectJ 使用了Java5 的注解,
      可以将切面声明为普通的Java类(POJO)。
     
     

      使用AspectJ 基于 注解的AOP
      接口
      实现类
      增强类 不去实现任何接口
     
      @Aspect
      public class MyAspect  {
          //前置增强
          @Before("execution(* *..UserService.*(..))")
          public void myBefore(){
              System.out.println("======之前");
          }
      }

      xml配置文件中
      <aop:aspectj-autoproxy>

     AspectJ基于XML的AOP实现  (开发常用)
     4.1前置增强
      <aop:config>
          <aop:pointcut expression="execution(* *..SomeServiceImpl.doLog(..))" id="beforePointcut"/>
          <aop:aspect ref="myAspect">
              <aop:before method="myBefore(org.aspectj.lang.JoinPoint)" pointcut-ref="beforePointcut"/>
          </aop:aspect>
       </aop:config>

  • 相关阅读:
    Good Substrings CodeForces
    Watto and Mechanism Codeforces Round #291 (Div. 2)
    Codeforces Round #487 (Div. 2) A Mist of Florescence (暴力构造)
    Oulipo HDU
    POJ
    求值2 组合数公式题目
    URAL
    SCU
    【转】phpcms授课学习
    WordPress文章浏览历史插件
  • 原文地址:https://www.cnblogs.com/yfyfyff/p/7665843.html
Copyright © 2011-2022 走看看