AOP

来源:互联网 发布:网站80端口开放攻击 编辑:程序博客网 时间:2024/06/06 06:31
                           AOP (Aspect Oriented Programing 面向切面编程


概念;面向切面编程  扩展功能不修改源代码
     采用横向抽取机制


   底层动态代理的方式实现
   1.接口的方式   (使用了jdk动态代理 
     直接interface 继承
     过程:继承了接口之后,会创建一个和继承类平级的代理对象,具有和继承类相同的功能
   2.继承的方式   (使用了cglib动态代理
     利用extends  继承父类
     创建了子类  继承父类 调用父类的方法 增强父类的方法


   连接点(joinPoint:类里面可以被增强的方法
   切入点(pointCut:类里面实际被增强的方法
   通知/增强(Advice:增强的逻辑。  (前置,后置,最终,循环
   切面:把增强应用到方法上面的过程 (面去增强切入点


AspactJ   
    1.spring里面的aop操作里使用AspactJ实现
        .aspackj不是spring的一部分,
        .只有spring2.x之后才增加了对aspactj的支持
    2.aop的准备
         安装aspacjt jar包  spring-aspects,spring-aop,aspectj,aopalliance包
         xml写入aop的约束条件




xml中配置Aop操作
    (面强化点)
<aop:config>
         <aop:piontcut expression="execution(* com.Book.add(..))" id="pointcut1">//配置切入点
            
         <aop:aspect ref="mybook">  //配置切入面  增强类的对象  
                <aop:before method="before" pointcut-ref="pointcut1">   哪个类来增强,用到的切入点
          </aop:aspect>
<aop:config>


    表达式配置切入点表达式
         增强切入点  
             1.excution(* com.Book.add(..))   //*访问修饰符 空格 路径的add方法(即切入点 ..包含参数
             2.excution(* com.Book.*(..))     //对类中的所有方法都增强
             3.excution(* *.*(..))             //所有类的所有方法都增强
             4.excution(* add*(..))            //所有的add开头的方法都增强


          前置插入 aop:before method="before" pointcut-ref="point"/>
          后置插入<aop:after-returning method="after" pointcut-ref="point"/>
          环绕插入<aop:around method="arround" pointcut-ref="point"/>
                   环绕配置方法
                         public void arround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
                           System.out.println("环绕之前");
                   proceedingJoinPoint.proceed();
                   System.out.println("环绕之后");
                           }










   
原创粉丝点击