AOP笔记

3.2
  AOP的应用场景:
    场景一: 记录日志 
    场景二: 监控方法运行时间 (监控性能)
    场景三: 权限控制 
    场景四: 缓存优化 (第一次调用查询数据库,将查询结果放入内存对象, 第二次调用, 直接从内存对象返回,不需要查询数据库 )
    场景五: 事务管理 (调用方法前开启事务, 调用方法后提交或者回滚、关闭事务 )

Aop相关术语:
      Aspect(切面): 就是一个java类,里面写的是   在执行的时候可增强的方法。
      joinpoint(连接点):是一些要进行增强的方法
      Pointcut(切入点):在什么时候加增强方法   在执行之前还是之后。    拦截那些bean的方法
      advice(通知): 指的是拦截到 切入点  之后要做的事情  就是通知    
      通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)
    

添加注解对象bean扫描
<!-- 1: aop配置切面类 -->
    <bean id = "log"   class="com.igeek.aop.aspect.Log"></bean>
    <bean id = "transaction" class="com.igeek.aop.aspect.Tramsaction"></bean>

<!-- 2: aop配置切面(包括切入点),让切入点关联通知 -->(那些点加入功能)
    <aop:config>
        <!-- 3:pointcut切入点:  拦截那些bean的方法
            execution(*包.类.方法(..))
                任意返回值        任意参数类型  -->
    <aop:pointcut id="pcut" expression="execution(*com.igeek.aop.service.impl.ItemServiceImpl.*。*(..))"></aop:pointcut>
<!-- 4:配置通知   -->  把配置的功能 关联到切入点
    <aop:aspect ref="log">
        <!--  
?        Before 前置通知,相当于BeforeAdvice
?        AfterReturning 后置通知,相当于AfterReturningAdvice   
?        AfterThrowing抛出通知,相当于ThrowAdvice

?        After 最终final通知,不管是否异常,该通知都会执行    
        -->
        <aop:after-returning method="log" pointcut-ref="pcut"/>
    </aop:aspect>
 </beans>    </aop:config>

------------aop   XML格式
<context:component-scan base-package="com.igeek.aop"></context:component-scan>
<bean id = "log"   class="com.igeek.aop.aspect.Log"></bean>
<aop:config>
    <!-- 切入点-->
    <aop:pointcut id="tcut " expression=" execution(*包.类.方法(..))"></aop:pointcut>    
    <!-- 配置通知-->                                        execution(* com.igeek.aop.service.impl.*.add*(..))"></aop:pointcut>
    <aop:aspect ref="transaction">
        <aop:before method=" "   pointcut-ref="tcut"/>
        <aop:after-returning method=" "   pointcut-ref="tcut"/>
        <aop:after-throwing method=" "   throwing= " "  pointcut-ref="tcut"/>
    </aop:aspect>
</aop:config>

--------------aop  注解配置格式
  在切面类内部配置:
    首先XML文件配置  <!-- 注解对象bean扫描 -->
    <context:component-scan base-package="com.igeek.aop"></context:component-scan>
    
    <!--  在spring容器中开启AspectJ 注解自动代理机制 
            使用<aop:aspectj-autoproxy/> -->
    <aop:aspectj-autoproxy/>
     A:    1、设置切面标识
    @Component
    @Aspect

    2、添加切入点
    @Pointcut( "execution(* com.igeek.aop.service.impl.*.*(..))")
    public void pcut() { }    //定义普通方法 - 配置切入点

    3、把增强方法关联到切入点
    @AfterReturning(pointcut="pcut()")       //pointcut=方法名()

B    :每个增强方法前都直接加直接
    @Before("execution(* com.igeek.aop.service.impl.*.deleteItem*(..)) or\r\n" + 
     " execution(* com.igeek.aop.service.impl.*.save*(..)) or\r\n" + 
     " execution(* com.igeek.aop.service.impl.*.insert*(..)) or\r\n" + 
     " execution(* com.igeek.aop.service.impl.*.update*(..)) or\r\n" + 
     " execution(* com.igeek.aop.service.impl.*.modify*(..)) or\r\n" + 
     " execution(* com.igeek.aop.service.impl.*.add*(..))")  

A方法比B方法的好处在于  提高代码的复用性  更清晰些
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值