spring aop部分

来源:互联网 发布:伤感好听的网络歌曲 编辑:程序博客网 时间:2024/06/07 10:27
AOP概念
    1.aop:面向切面编程,扩展功能不修改源代码实现
    2.采用的是横向抽取机制
AOP原理    
       底层使用的是动态代理实现
        1. 有接口的情况(JDK动态代理)
          使用动态代理方式,创建接口实现类代理对象
          创建和DaoImpl类平级对象,不是真正对象,代理对象,实现和DaoImpl相同的功能
        2.没有接口情况  (cglib动态代理)
          创建User类的子类的代理对象
          在子类中调用父类的方法完成
AOP中相关的术语
   *连接点:类里面的哪些方法可以被增强,这些方法被称为 Joinpoint(连接点)  
   *切入点:在类里可以有很多方法被增强,而真正增强的方法称为Pointcut(切入点)
   *通知/增强:增强的逻辑,称为增强。
     前置通知:在方法之前执行
     后置通知:在方法之后执行
     异常通知:方法出现异常
     最终通知:在后置之后执行
     环绕通知:在之前和之后执行
   *切面:把增强应用到具体的方法上面,过程称为Aspect(切面)。
     把增强用到切入点的过程
Spring的aop操作     
   1.在spring里进行aop操作,使用aspectj实现
   2.使用aspectj实现aop有两种方式
    (1)基于aspectj的xml配置
    (2)基于aspectj的注解方式
Aop操作准备    
  1.导入jar包
    aopalliance
    aspectjweaver
    spring-aop-4.2.4RELEASE.jar
    spring-aspects-4.2.4RELEASE.jar
  2.创建spring核心的配置文件
     xml中配置aop约束
使用表达式配置切入点
    1.切入点:实际增强的方法
    2.常用的表达式
        (1)execution(* (增强方法的全路径))
        (2)execution(* (增强类的全路径).*)
        (3)execution(* *.*(..))
aspectj的aop操作
 (xml)
   <bean id="book" class=""></bean>
   <bean id="mybook" class=""></bean>
  <aop:config>
     配置切入点
    <aop:pointcut expression="execution(* Book.*(...))" id="pointcut1"/>
     配置切面
    <aop:aspect  ref="mybook">
        配置增强类型
         <aop:before method="before1"  pointcut-ref="pointcut1"/>
         <aop:after-returning method="after1" pointcut-ref="pointcut1"/>
         <aop:around method="around1"  pointcut-ref="pointcut1"/>
      </aop:aspect>
  </aop:config>
      注:环绕通知
         public void around1(ProceedingJoinPoint ProceedingJoinPoint) throws Throwable{
             System.out.println("方法之前....")
              proceedingJoinPoint.proceed();
             System.out.println("方法之后....")

         }

基于aspectj的注解aop
    1.使用注解方式实现aop操作
      第一步  创建对象
      第二步  在spring的核心文件中开启aop的操作
       
           <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
           <bean id="" class=""></bean>

      第三步:在增强类上使用注解实现aop操作
          1.在增强类上添加   @Aspect
          2.@Before            实例  @Before(value="execution(* Book.*(...))")
            @AfterReturning
            @Around
            @AfterThrowing
            @After           


原创粉丝点击