关于spring的AOP使用
2014-10-30 23:47
393 查看
目前项目中用的比较多的是@AspectJ注解的切面和XML配置的AOP
表述:
最近这个项目用的是XML配置的AOP
配置一个<aop:config>跟节点,下面配置一个advisor或者aspect,里面再配置一个pointcut的正则表示执行的地点和advice什么时候执行什么事。
概念陈述:
1.通知(advice),定义了什么时候,做什么事。
2.切点(pointcut),定义了在什么地点。
3.通知者 (advisor),一个通知者包含一个切点和一个通知者
4.切面 (aspect ),一个切面可以包含多个切点和通知者
实例1:利用AOP切面控制事物,通知者 (advisor),一个通知者包含一个切点和一个通知者
<aop:config>
<aop:pointcut id="jdbcDataAccessOperation" expression="execution(* com.lujun.imw.common.service.*.*(..)) ||
execution(* com.lujun.imw.mgs.common.service.*.*(..)) ||
execution(* com.lujun.imw.imp.common.service.*.*(..)) ||
execution(* com.lujun.imw.mmc.service.*.*(..))" /> <!--切点,配置在什么地点-->
<aop:advisor advice-ref="jdbcTxAdvice" pointcut-ref="jdbcDataAccessOperation" /> <!--通知者,由一个通知(advice)和一个切点(pointcut)组成-->
</aop:config>
<!--通知(advice)-->
<tx:advice id="jdbcTxAdvice" transaction-manager="jdbcTxManager"> <!--做什么事:事物控制-->
<tx:attributes>
<tx:method name="save*" rollback-for="Exception" /> <!--什么时候:增删改-->
<tx:method name="insert*" rollback-for="Exception" />
<tx:method name="update*" rollback-for="Exception" />
<tx:method name="delete*" rollback-for="Exception" />
</tx:attributes>
</tx:advice>
spring在aop的命名空间里面还提供了其他的配置元素:
<aop:advisor> 定义一个AOP通知者
<aop:after> 后通知
<aop:after-returning> 返回后通知
<aop:after-throwing> 抛出后通知
<aop:around> 周围通知
<aop:aspect>定义一个切面
<aop:before>前通知
<aop:config>顶级配置元素,类似于<beans>这种东西
<aop:pointcut>定义一个切点
实例2:切面 (aspect ),一个切面可以包含多个切点和通知者
<aop:config>
<aop:aspect ref="sleepHelper">
<aop:before method="beforeSleep" pointcut="execution(* *.sleep(..))"/> //<aop:before>这个节点本身就是一个通知,在before(什么时候) sleep方法(切点)的时候(什么地方),执行beforeSleep方法(做什么事)
<aop:after method="afterSleep" pointcut="execution(* *.sleep(..))"/>
</aop:aspect>
</aop:config>
表述:
最近这个项目用的是XML配置的AOP
配置一个<aop:config>跟节点,下面配置一个advisor或者aspect,里面再配置一个pointcut的正则表示执行的地点和advice什么时候执行什么事。
概念陈述:
1.通知(advice),定义了什么时候,做什么事。
2.切点(pointcut),定义了在什么地点。
3.通知者 (advisor),一个通知者包含一个切点和一个通知者
4.切面 (aspect ),一个切面可以包含多个切点和通知者
实例1:利用AOP切面控制事物,通知者 (advisor),一个通知者包含一个切点和一个通知者
<aop:config>
<aop:pointcut id="jdbcDataAccessOperation" expression="execution(* com.lujun.imw.common.service.*.*(..)) ||
execution(* com.lujun.imw.mgs.common.service.*.*(..)) ||
execution(* com.lujun.imw.imp.common.service.*.*(..)) ||
execution(* com.lujun.imw.mmc.service.*.*(..))" /> <!--切点,配置在什么地点-->
<aop:advisor advice-ref="jdbcTxAdvice" pointcut-ref="jdbcDataAccessOperation" /> <!--通知者,由一个通知(advice)和一个切点(pointcut)组成-->
</aop:config>
<!--通知(advice)-->
<tx:advice id="jdbcTxAdvice" transaction-manager="jdbcTxManager"> <!--做什么事:事物控制-->
<tx:attributes>
<tx:method name="save*" rollback-for="Exception" /> <!--什么时候:增删改-->
<tx:method name="insert*" rollback-for="Exception" />
<tx:method name="update*" rollback-for="Exception" />
<tx:method name="delete*" rollback-for="Exception" />
</tx:attributes>
</tx:advice>
spring在aop的命名空间里面还提供了其他的配置元素:
<aop:advisor> 定义一个AOP通知者
<aop:after> 后通知
<aop:after-returning> 返回后通知
<aop:after-throwing> 抛出后通知
<aop:around> 周围通知
<aop:aspect>定义一个切面
<aop:before>前通知
<aop:config>顶级配置元素,类似于<beans>这种东西
<aop:pointcut>定义一个切点
实例2:切面 (aspect ),一个切面可以包含多个切点和通知者
<aop:config>
<aop:aspect ref="sleepHelper">
<aop:before method="beforeSleep" pointcut="execution(* *.sleep(..))"/> //<aop:before>这个节点本身就是一个通知,在before(什么时候) sleep方法(切点)的时候(什么地方),执行beforeSleep方法(做什么事)
<aop:after method="afterSleep" pointcut="execution(* *.sleep(..))"/>
</aop:aspect>
</aop:config>
相关文章推荐
- 初学spring 关于IOC与AOP 使用的设计模式
- 初学spring 关于IOC与AOP 使用的设计模式
- Spring 2.0 中使用AOP新特性中关于Poincur的定义规则
- 关于Spring aop框架使用的jar包下载
- 关于spring.net的面向切面编程 (Aspect Oriented Programming with Spring.NET)-使用工厂创建代理(Using the ProxyFactoryObject to create AOP proxies)
- 关于spring3使用AOP编程时需要引入哪些jar包的问题
- 关于使用Spring AOP 环绕性增强出现异常影响业务流程的问题
- 关于 spring aop execution 属性的使用
- 关于spring切面使用<aop:aspectj-autoproxy/>报错的解决方法
- spring aop 中@annotation()的使用,关于自定义注解,绝壁原创的文章
- 初学spring 关于IOC与AOP 使用的设计模式
- Spring中使用AOP例子
- 关于springIDE的安装与使用 【Spring2.0 技术手册补遗 】
- 使用Spring-Aop实现Hibernate事务管理
- 关于同 Struts 2.0.6 配合使用 Spring 出现的问题
- 关于springIDE的安装与使用 【Spring2.0 技术手册补遗 】
- spring.net 1.1.0 P3版本 中spring.core.dll 1.1.0.2版本对于AOP使用ADVICE中涉及使用ref/out参数的小问题
- 使用Spring的AOP进行缓存在遭遇Hibernate应用时的注意点
- 关于在Spring下 使用HQL 语句模糊查询的实现方法
- 在spring中关于CP30数据库连接池使用oracle数据库是存储blog对象出错的问题