Spring的AOP总结

阅读更多

1.Spring AOP的知识点总结:
 a.AOP--------->面向切面编程,其核心:解决程序中的公共问题(如:权限验证,日志记录等)
 b.AOP概念:
  I.切面(Aspect):一个关注点的模块化,可能横切多个对象(如:事务管理)。
  I.连接点(JoinPoint):程序执行过程中某个特定的点(如:调用某方法或者处理异常)。
  I.通知(Advice):包括Around(环绕通知)、Before(前置通知)、After(后置通知)、Throws(异常通知),大部分AOP框架以(Interceptors)拦截

器作为
    通知模型。
  I.切入点(Pointcut):匹配连接点(JoinPoint)的断言。
  I.引入(Introduction):为一个类增加方法或字段。通过引入来使所有对象实现IsModified接口。-------为简化缓存。
  I.目标对象(Target Object):包含一个连接点的对象,也称代理对象。
  I.AOP代理(AOP Proxy):AOP框架产生的对象,包括通知Advice。
  I.织入(Weaing):将切面(Aspect)连接至其他应用程序类型或对象,并创建被通知(Advised)的对象。

2.Spring AOP代理:通过调用某个类的**方法之前或之后执行相应的操作(如:权限验证,日志记录等)
  注意:spring默认主要用于接口的JDK动态代理,也可以通过CGLIB代理实现类的代理而非接口。若对象无须实现接口,默认使用CGLIB代理。
        CGLIB代理类特点:是对实现类进行代理。必须启用:
        
  I.AOP代理的特点:代码从系统中分离,精力集中业务的实现。
                   系统涉及的公共问题集中实现。
                   精力集中在业务代码的实现。
  I.Spring AOP:只支持Spring Bean方法执行连接点,
  I.切入点声明包括两个部分:
    a.签名,包含名称与任意参数。
    b.切入点表达式,决定关注哪个方法的执行。
   
   
3.Spring的通知:实现了核心业务与非核心业务的分离。
  I.Around(环绕通知):在连接点的前后执行,拦截对目标对象方法的调用。
    a.环绕通知需要实现MethodInterceptor接口。
    b.invoke()方法在执行代理的目标方法时该方法自动调用。(invocation:连接点所属目标子类及连接点信息)
      public Object invoke(MethodInvocation invocation) throws Throwable{
       ------------前置的操作-------------
       Object obj=invocation.proceed();
       ------------后置的操作-------------
        return obj;
      }
     
   II. 前置通知(Before):在目标方法被调用之前调用
     a.前置通知实现MethodBeforeAdvice接口
     b.before()方法将在目标方法调用之前自动被调用
     public void before(Method  args0,Object[] arg1,Object arg2) throws Throwable{
      //一些在业务操作之前调用的操作
     } 
     注解:arg0:记录连接点的信息
           arg1:连接点(即被通知的方法)的参数信息
           arg2:目标对象信息
  
   III.后置通知(After):在目标方法被调用之后调用
      a.后置通知实现AfterReturningAdvice接口。
      b.afterReturning()方法在目标方法调用结束后自动调用。
      pubic void afterReturning(Object arg0,Method arg1,Object[]arg2,Object arg3) throws Throwable{
       //一些在业务方法操作之后调用的操作
      }
      注解:arg0:连接点方法返回类型信息
            arg1:连接点的参数信息
            arg2:连接点所属的目标类
 
    IV.异常通知(Throws):当连接点(即目标方法)抛出异常时才会执行异常通知类。
       a.实现ThrowsAdvice接口。
       b.afterThrowing()方法在目标方法抛出异常时调用
         public void aferThrowing(Method method,Object[]arg0,Object arg1) throws Throwable{
          //定义异常的信息或方法
         }
  V.在提供一些通知后要在applicationContext.xml中配置
   a.配置spring代理方式定义的实体对象
   b.配置通知类
  
  
           
           
           
           
           
           


       
       
        .*方法名.*
       

       
       

    -->
   c.使用ProxyFactoryBean产生代理对象,通过代理类访问业务逻辑。
    ------>配置一个代理工厂
   
    --------->必须依靠代理上层的代理接口
    自定义的接口的path
   

    d.通过代理需要的拦截器,可以是普通的Advice,也可以是Advisor
    
    
     beforeAdvice(通知类的实例对象)
    

    

     e.目标对象------->目标对象
    
    
    

    
----------------------------------------------------------------------------
注意:AOP:也可如下实现切面注入
    I.配置切面Bean和实体类bean
    I.配置信息
   
   
   
   
   
   
   
   
   

   

你可能感兴趣的:(Spring,AOP,aspect)