Spring框架前置增强,后置增强,环挠增强,异常增强,最终增强

**

Spring框架前置增强,后置增强,环绕增强,异常增强,最终增强

**

前言

Spring 切点

什么是切点?切点(Pointcut),每个程序类都拥有多个连接点,如一个拥有两个方法的类,这两个方法都是连接点,即连接点是程序类中客观存在的事物。但在这为数从多的连接点中,如何定位到某个感兴趣的连接点上呢?AOP通过"切点"定位特定连接点。通过数据库查询的概念来理解切点和连接点的关系再适合不过了;连接点相当于数据库中的记录,而切点相当于查询条件. 在Spring中,切点通过org.springframework.aop.Pointcut接口进行描述,它使用类和方法作为连接点的查询条 件,Spring AOP的规则解析引擎负责解析切点所设定的查询条件,找到对应的连接点—其实确切地说,应该是执行点而非连接点,因为连接点是方法执行前、执行后等包 括方位信息的具体程序执行点,而切点只定位到某个方法上,所以如果希望定位到具体连接点上,还需要提供方位信息。

实现AOP的切面主要有以下几个要素

使用@Aspect注解将一个java类定义为切面
使用@Pointcut定义一个切入点,可以是一个规则表达式,比如下例中某个package下的所有函数,也可以是一个注解等
使用@Before在切入点开始处切入内
使用@After在切入点结尾处切入内
使用@AfterReturning在切入点return内容之后切入内容(可以用来对处理返回值做一些加工处理
使用@Around在切入点前后切入内容,并自己控制何时执行切入点自身的内
使用@AfterThrowing用来处理当切入内容部分抛出异常之后的处理逻辑


1.添加spring配置文件命名空间如下

xmlns:aop="http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd

2.声明增强方法所在的Bean
3.配置切面
4.配置切面
5.引用包含增强方法的Bean

<?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:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
 http://www.springframework.org/schema/aop
 http://www.springframework.org/schema/aop/spring-aop-3.2.xsd">

    <bean id="userDao" class="dao.Impl.UserDaoImpl"></bean>
    <bean id="userService" class="service.Impl.UserServiceImpl">
        <property name="userDao" ref="userDao"></property>
    </bean
    <!-- 声明增强方法所在的Bean -->
    <!--    <bean id="errorLogger" class="aop.LoggerError"></bean>-->
    <!-- 配置切面 -->
   <aop:config>    
		<!-- 定义切入点 -->
        <aop:pointcut id="pointcut" expression="execution(* service.*.*(..))" />
    	<!-- 定义切入点 -->
        <aop:aspect ref="errorLogger">
        
	        <!-- 将afterReturning()方法定义为后置增强并引用pointcut切入点 -->
	       <!--after-returning 就是后置增强-->
	       <!--returning能够将目标方法的返回值传到切面增强方法里-->
            <aop:after-returning method="afterReturning" pointcut-ref="pointcut" returning="result"/>
            
	        <!--将before()方法定义为前置增强并引用pointcut切入点-->
		    <!--before就是前置增强-->    
            <aop:before method="before" pointcut-ref="pointcut"/>
            
            <!-- 将after()方法定义为最终增强并引用pointcut切入点 -->
            <!-- 通过throwing属性指定为名为e的参数注入异常实例 -->
            <!--aop:after 就是最终增强的标签元素-->
            <aop:after method="after" pointcut-ref="pointcut"/>
            
            <!-- 将afterThrowing()方法定义为异常抛出增强并引用pointcut切入点 -->
            <!-- 通过throwing属性指定为名为e的参数注入异常实例 --         
		    <!--after-throwing 就是异常抛出增强-->
            <aop:after-throwing method="afterThrowing" pointcut-ref="pointcut" throwing="e" />
        </aop:aspect>
    </aop:config>
   </bean>

###环绕增强配置

    <!-- 配置切面 -->
    <aop:config>
        <!-- 定义切入点 -->
        <aop:pointcut id="pointcut" expression="execution(* service.*.*(..))" />
        <!-- 织入环绕增强处理 -->
        <aop:aspect ref="aroundLogger">
            <!--aop:around 为环绕增强的标签元素,引入到切入点 pointcut-->
            <aop:around method="aroundLogger" pointcut-ref="pointcut"/>
        </aop:aspect>
    </aop:config>

Demo:链接:

https://pan.baidu.com/s/1QbJPKCN59MoJCjjmEOQqxA 
提取码:izgf 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zzc8081

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值