spring aop

6 篇文章 0 订阅

一、Aop central concepts

  • Aspect(横切面):一个横切多个类的模块,在企业级java应用中,事务管理就是一个很好的横切面的例子,在spring Aop模块中,aspect有两种实现方式,一是xml配置,二是注解

  • Join point:将要被Point Cut用来收集的函数(普通的函数)

  • Advice:当满足Pointcut时,要执行的操作(around,before,after)

  • Pointcut:用来收集Join Point,对满足条件的join point进行拦截

  • Target object:要进行横切的对象

  • Aop proxy:代理

二、Types of advice(adive有5中类型)

  • Before advice 方法执行之前被调用

  • After returning advice 方法执行成功以后调用

  • After throwing advice 当调用异常的时候调用

  • After (finally) advice 方法执行以后调用,不过有没有调用成功

  • Around advice 方法执行前和后调用

三、空的xml-Based文件

<?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"

   xsi:schemaLocation="http://www.springframework.org/schema/beans

   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

   http://www.springframework.org/schema/aop

   http://www.springframework.org/schema/aop/spring-aop-3.0.xsd ">

<!--定义aop:config-->  

<!--定义bean-->  

</beans>

四、Aop配置示例一

<aop:config>

     <aop:aspect id="advice" ref="adviceImp">

        <aop:before pointcut="execution(* com.sunny.test.*.*(..))" method="doBefore"/>

     </aop:aspect>

  </aop:config>


  <!-- Definition aspect -->

  <bean id="adviceImp" class="com.sunny.spring_aop.AdviceImp"/>

  <!-- Definition Bean -->

<bean id="test" class="com.sunny.test.Test"/>  

说明:

  • adviceImp为Aspect的实现即为Advice

  • <aop:config>为Aop的配置实例,<aop:before>在函数之前调用

  • pointcut="execution(* com.sunny.test.*.*(..))"收集join point,然后执行method中配置的函数

  • <bean id="test" class="com.sunny.test.Test"/>  这个bean中的函数将会pointcut收集,注意这个Test类的示例只能在这里生产(用getBean来产生示例),如果用new Test()来产生实例将不会被piontcut收集

  • 完成上述配置,调用Test类中的方法时候,Advice中的doBefore方法将会在该函数之前执行

  • execution(* com.sunny.test.Test.*(..))对com.sunny.test包下面的Test类进行pointcut操作

  • execution(* com.sunny.test.Test.fun(..))对com.sunny.test.Test类下面的fun方法进行pointcut操作

  • execution(* com.sunny.test.Test.fun(String))对com.sunny.test.Test类下面的fun(String)方法进行pointcut操作

  • 上述的aop:config可用下配置(把pointcut放在一个全局配置的位置)

<aop:config>

     <aop:aspect id="advice" ref="adviceImp">

     <aop:pointcut id="pointc" expression="execution(* com.sunny.test.*.*(..))"/>

        <aop:before pointcut-ref="pointc" method="doBefore"/>

     </aop:aspect>

  </aop:config>



参考官网文档:http://docs.spring.io/spring/docs/4.1.8.RELEASE/spring-framework-reference/htmlsingle/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值