Spring AOP基本配置

最近几天回顾翻了一下spring,以前看的时候没做过多的总结,再次好好总结一次。

好记性不如烂笔头,况且记性也不咋地大笑

spring AOP需要的基本jar包

  1. aop的核心包:org.springframework.aop-xxx.jar
  2. spring AOP联盟包:aopalliance.xx.jar
  3. aspectJ相关包:aspectjrt.jar aspectjweaver.jar
  4. 如果需要使用动态代理,添加cglib相关的jar包

spring xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:aop="http://www.springframework.org/schema/aop"
         xmlns:tx="http://www.springframework.org/schema/tx"
         xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> 
    
    
</beans>

下面是<beans> 的几个属性解释
  • xmlns:默认的xml文档解析格式,http://www.springframework.org/schema/beans/,通过这个属性,所有在beans里面声明的属性,都可以直接通过<>来使用,如<bean>
  • xmlns:xsi:xml需要遵守的规范,通过URL可以看到是W3的统一规范,后面通过xsi:schemaLocation来定位所有的解析文件
  • xmlns:aop:我们需要使用到的一些语义规范,与面向界面AOP相关
  • xmlns:tx:spring中与事务相关的配置内容
一个XML文件,只能声明一个默认的语义解析的规范。
比如上面的xml中就只有beans是默认的,其他的都需要通过特定的标签来使用,如aop,它自己包含很多属性,如果要使用。前面必须加上aop:xxx才可以(aop:config)。
类似,如果默认的xmlns配置的是aop相关的语义解析规范,那么在xml中就可以直接写上config即可。

aspect配置

...省略beans的定义内容

    <bean id="audience" class="com.spring.test.aop.Audience"/>
    
    <bean id="sax" class="com.spring.test.setter.Saxophone"/>
    <bean id="kenny" class="com.spring.test.setter.Instrumentalist">
         <property name="song" value="Jingle Bells" />
         <property name="age" value="25" />
         <property name="instrument" ref="sax"/>
    </bean>
    
    <aop:config proxy-target-class="true">
        <!-- 这个声明了一个切面类 -->
        <aop:aspect ref="audience">
            <aop:pointcut id="performance" expression="execution(* com.spring.test.action1.Performer.perform(..))"/>
            
            <aop:before pointcut-ref="performance" method="takeSeats"/>
            <aop:before pointcut-ref="performance" method="turnOffCellPhones"/>
            <aop:after pointcut-ref="performance" method="applaud"/>
            <aop:after pointcut-ref="performance" method="demandRefund"/>
        </aop:aspect>
    </aop:config>
</beans>
  • <aop:advisor>:用来定义只有一个通知和一个切入点的切面。
  • <aop:aspect>:用来定义切面,该切面可以包含多个切入点和通知,而且标签内部的通知和切入点定义是无序的;和advisor的区别就在此,advisor只包含一个通知和一个切入点。
  • 在aop:aspect中定义了两个切面,aop:before和aop:after。before:在切入点之前植入before方法。after:在切入点之后植入after方法。

pointcut配置

  • execution(public**(..)) 切入点为执行所有public方法时
  • execution(set(..)) 切入点为执行所有set方法开始的方法时
  • execution(com.hmx.service.AccountService.(..)) 切入点为执行AccountService类中的所有方法时
  • execution(*com.hmx.service..(..)) 切入点为执行com.hmx.service包下的所有方法时
  • execution(*com.hmx.service...(..)) 切入点为执行com.hmx.service包及其子包下的所有方法时

Introduction

  • 允许一个切面声明一个实现指定接口的通知对象,并且提供了一个接口实现类来代表这些对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值