一:概述

众所周知,Spring是一个轻量级的、非侵入式的、独立于各种应用服务器的开源框架。它的两大方面被人们所熟知,也应用很广。那就是IOC(控制反转)和AOP(面向方面编程)。

IOC是开发者不创建对象,但是描述创建它们的方式,对象由Spring容器根据描述来产生对象,这里特别需要指出的是Spring是依赖于接口编程的,所以描述创建对象时,改对象必须实现于对应的接口

AOP允许开发者对横切关注点或横切典型的职责分界线的行为(例如日志和事务管理)进行模块化。AOP 的核心构造是方面,它将那些影响多个类的行为封装到可重用的模块中。

二:实现

目前在本人开发中用到的比较读多的是注解这一方案。


首先在applicationXContext.xml中配置:

<aop:aspectj-autoproxy proxy-target-class="true"/>

<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" propagation="REQUIRED" read-only="true"/>
<tx:method name="query*" propagation="REQUIRED" read-only="true"/>
<tx:method name="find*" propagation="REQUIRED" read-only="true"/>
<tx:method name="save*" propagation="REQUIRED" rollback-for="Throwable"/>
<tx:method name="delete*" propagation="REQUIRED" rollback-for="Throwable"/>
<tx:method name="update*" propagation="REQUIRED" rollback-for="Throwable"/>
</tx:attributes>
</tx:advice> <aop:config>
<aop:pointcut id="interceptorPointCuts"
expression="execution(public * com.meth.server.estudy..*Service*.*(..))" />
<aop:advisor advice-ref="txAdvice"
pointcut-ref="interceptorPointCuts" />
</aop:config>

在该配置中aop切面表达式为:public * com.meth.server.estudy..*Service*.*(..)

这点极为重要,为何我们只要拦截到Service层?你们是否有考虑过这个问题


1.当你的表达式为拦截全部时,Hibernate级联就会失败

2.其次Struts的对象不会被容器创建,需要你手动创建,否则界面交互操作会失败

<aop:pointcut>中的expression属性起到了关键性的作用,它定义了哪些对象的哪些方法执行时被aop拦截

3、理解Spring中的AOP代理可以从理解JDK的动态代理开始,也就是某个类去实现java.lang.reflect.InvocationHandler接口

最新文章

  1. T-sql 查询
  2. Android布局整理Relative/Linear
  3. 判断线段相交 -- 51nod 1264 线段相交
  4. 【LeetCode 235】Lowest Common Ancestor of a Binary Search Tree
  5. 【异构计算】OpenCL中上下文
  6. [STOI2014]舞伴(dp)
  7. c++编程思想(一)--对象导言
  8. ehcache的基本使用及Spring整合
  9. NSURLSession使用, 后台下载
  10. iptables 防火墙日常
  11. 使用ajax+php+mysql实现数据库定时刷新
  12. Java之所有输入流输出流的分类
  13. JAVA中的配置文件XML
  14. alpine linux docker 安装 lxml出错的解决办法。
  15. 将button或者input角变为圆弧
  16. 转:winform 打包自动安装数据库
  17. mysql语句性能分析案例
  18. linux大小写转换
  19. JDBC+Servlet+JSP实现基本的增删改查(简易通讯录)
  20. Silverlight实例教程 - Validation用户提交数据验证捕获(转载)

热门文章

  1. hdu 5533 正n边形判断 精度处理
  2. 三元环HDU 6184
  3. flask框架(一):初入
  4. [CSP-S模拟测试]:C(三分+贪心)
  5. [题解] [AHOI2009] 跳棋
  6. css垂直居中布局总结
  7. 【gradle】【maven】gradle 转 maven pom.xml
  8. ccf 201409-3 字符串匹配(toupper,tolower)
  9. Linux 关机/重启命令
  10. JNI的开发步骤