- 浏览: 1189018 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (350)
- Ajax研究 (2)
- javascript (22)
- struts (15)
- hibernate (12)
- spring (8)
- 我的生活 (28)
- jsp (2)
- 我的随笔 (84)
- 脑筋急转弯 (1)
- struts2 (2)
- ibatis (1)
- groovy (1)
- json (4)
- flex (20)
- Html Css (5)
- lucene (11)
- solr研究 (2)
- nutch (25)
- ExtJs (3)
- linux (6)
- 正则表达式 (2)
- xml (1)
- jetty (0)
- 多线程 (1)
- hadoop (40)
- mapreduce (5)
- webservice (2)
- 云计算 (8)
- 创业计划 (1)
- android (8)
- jvm内存研究 (1)
- 新闻 (2)
- JPA (1)
- 搜索技术研究 (2)
- perl (1)
- awk (1)
- hive (7)
- jvm (1)
最新评论
-
pandaball:
支持一下,心如大海
做有气质的男人 -
recall992:
山东分公司的风格[color=brown]岁的法国电视[/co ...
solr是如何存储索引的 -
zhangsasa:
-services "services-config ...
flex中endpoint的作用是什么? -
来利强:
非常感谢
java使用json所需要的几个包 -
zhanglian520:
有参考价值。
hadoop部署错误之一:java.lang.IllegalArgumentException: Wrong FS
************Spring 1.0的标准事务配置***************
先定义一个baseTxService进行基本的事务定义,类型为TransactionProxyFactoryBean。如果service没有基于接口,使用cgilib来实现AOP,定义<property name="proxyTargetClass" value="true"></property>
实际的Manager类设置parent=baseTxService,target 为匿名的实际Manager类。如果需要定义特殊的事务,利用merge=true的属性,在manager的transactionAttributes节点进行新事务的定义。
<bean id="baseTxService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true"><property name="transactionManager" ref="transactionManager"></property><property name="proxyTargetClass" value="true"></property><property name="transactionAttributes"><props><prop key="get*">PROPAGATION_REQUIRED,readOnly</prop><prop key="find*">PROPAGATION_REQUIRED,readOnly</prop><prop key="save*">PROPAGATION_REQUIRED</prop><prop key="remove*">PROPAGATION_REQUIRED</prop></props></property><property name="preInterceptors"><list><ref bean="methodSecurityInterceptor"></ref></list></property></bean><bean id="bookManager" parent="baseTxService"><property name="target"><bean class="org.springside.bookstore.admin.manager.BookManager"></bean></property></bean>
**************Spring 2.0的新配置:*********
如果如果service没有基于接口,使用cgilib来实现AOP,定义proxy-target-class="true"
<config proxy-target-class="true"><advisor pointcut="execution(* com.xyz.service..*Manager.*(..))" advice-ref="txAdvice"></advisor><advisor pointcut="execution(* com.xyz.service..*Manager.save(..))" advice-ref="fooAdvice"></advisor></config><advice id="txAdvice" transaction-manager="transactionManager"><attributes><method name="get*" read-only="true"></method><method name="find*" read-only="true"></method><method name="*"></method></attributes></advice><bean id="bookManager" class="org.springside.bookstore.commons.service.BookManager"></bean> 其中com.xyz是你的项目package限定前缀。
2.进步
1. AOP的配置方式也AOP了。
对比1.0的配置文件,因为下面2提到的限制,事关安全acegi methodSecurityInterceptor 拦截器要配置在关于事务的TransactionProxyFactoryBean的preInterceptors属性里,这样子就一点不AOP了。
而2.0使用ponintcut expression,很AOP的配置一切Aspect。
2. 1.0时,一个已经AOP过的object不能再次被AOP。
在Spring 1.0的文档里Rod说,比如<bean id="bookManager" parent="baseTxService">已经进行了一次AOP,如果想在这个Bean上再配一层AOP,比如要对方法执行结果缓存,无论以1.0 还是2.0的方式定义,cglib方式是会报错的,而基于接口的方式,结果不确定。
3. BookManager能直接定义自己,而不是像1.0那样作匿名内部target。
虽然在1.0时代的BeanNameAutoProxyCreator 达到类似作用,但只能用BeanName来模糊匹配比较危险,没有AspectJ的pointcut语法细致。
3. 语法
满江红翻译的 Spring参考文档 6.3 schema-based AOP support 提供了aspect,advisor,advide三种组装方法的解释,其中aspect是aspectJ原装,但稍复杂。
唯一有点难懂的是pointcut里的语法,其实也很好学,Spring参考文档6.2.3.4 示例里有完整说明 ,其实一排子过去是
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)其中带问号的modifiers-pattern?(public/protected) 和 declaring-type-pattern? throws-pattern? 可以不填
execution(* *..BookManager.save(..))的解读:
第一颗* 代表ret-type-pattern 返回值可任意,
*..BookManager 代表任意Pacakge里的BookManager类。
如果写成com.xyz.service.* 则代表com.xyz.service下的任意类
com.xyz.service..* com.xyz.service则代表com.xyz.service及其子package下的任意类
save代表save方法,也可以写save* 代表saveBook()等方法
(..) 匹配0个参数或者多个参数的,任意类型
(x,..) 第一个参数的类型必须是X
(x,,,s,..) 匹配至少4个参数,第一个参数必须是x类型,第二个和第三个参数可以任意,第四个必须是s类型。
注意事项:
1. name-pattern千万不要写成*..*Manager ,这样子会把所有第三方类库的Manager比如Spring的PlatformTranstationManager 也加入aop,非常危险。所以最好还是加上项目的package前缀,如"org.springside..*Manager"
2. 因为有*,会修饰所有方法,有些hibernateTemplate的final的方法不能被cglib修改,会抛warning,无害。
4. 事务定义选项
事务定义一般默认的PROPAGATION_REQUIRED即可,另提供的几个选择很少使用。值得注意的是一个PROPAGATION_NESTED,嵌入式事务的意义在于多级事务,如果出错只rollback子事务自己,不rollback主事务的所有操作。比如OrderManager的shipOrder函数 调用 save函数,如果save()被定义为嵌入式事务,当进入save()时,会存储save point。如果在save 中出错,会rollback 到刚才的save point,但不影响其他的操作。这需要JDBC3.0 SavePoint功能的支持。 而一般service间互相嵌入调用时,如果都定义为PROPAGATION_REQUIRED,有其中一个操作出错,rollback全部操作</bean>
发表评论
-
认真阅读hadoop源码
2012-11-01 16:00 1798从新复习hadoop,认真阅读hadoop源码,有兴趣的朋友可 ... -
铁道部售票网站怎么啦?
2012-01-10 10:25 1895乐淘CTO李勇:库存同步是难点 我的判断,除了 ... -
eclipse启动报错jvm terminated. Exit code=1
2011-10-11 08:55 1243转载链接: http://wxmfly.itey ... -
ireport中获取当前时间
2011-08-28 11:53 5188一。 iReport 中获取系统当前时间 1,选择Tex ... -
ireport引java bean database
2011-08-27 10:38 1767今天帮一同事调试程序,他们的报表工具用的是ireport4.0 ... -
谈谈爬虫的设计
2011-08-07 22:27 2334网络蜘蛛现在开源的已 ... -
为了养家,只能这样!
2011-07-03 16:22 16还是一直在玩数据,hadoop平台(自己一手搭建),使用爬虫n ... -
陆续整理数据方面的资料
2011-05-07 08:58 644差不多有一个多月没写东西了,最近比较忙!还是研究数据一些东西。 ... -
挣钱养家
2011-04-14 22:19 1172如果各位有私活的话忙不过来,可以通过QQ(282215036) ... -
使用perl连接mysql数据库
2011-04-05 22:21 1452用Perl DBI连接MySQL数据库 Perl中一个最酷的 ... -
图像数字识别技术
2011-04-01 17:32 5959最近在研究图像数字识别技术,对于一些简单没有干扰的图片,可以读 ... -
100个可供选择的搜索引擎
2011-03-02 13:11 1551本文根据 readwriteweb ... -
对于处理问题的一点想法
2011-02-23 08:26 1135昨天快下班的时候,遇到一个建立索引的问题,因为快下班了,我没有 ... -
温故而知新
2011-02-20 16:44 1204又回过头来复习以前的知识了?在家里实在无聊!把之前学习过的东西 ... -
加钱也得买票回家过年
2011-01-25 08:44 999昨天从黄牛党手上拿了一张高价票。加了100.哎!这年头在外面忙 ... -
Eclipse3.6 Helios SVN插件–Subversive
2011-01-12 11:42 3670刚在Google Code上发布了一个Open Project ... -
博客有时候来不及更新,希望大家见谅!
2011-01-10 17:42 1027刚到新公司,可能开始忙了,博客有时候来不及更新,希望大家见谅! ... -
新公司入职第一天
2011-01-10 11:47 1345今天是我去新公司入职的第一天。感觉一切都是新的,从头开始!加油 ... -
java中各种算法的实现
2010-12-30 13:01 1179选择排序算法的JAVA实现 viewplainprin ... -
java基础知识复习
2010-12-30 13:00 1036学习Java一 配置环境变量 学习Java二 开发第一 ...
相关推荐
《Spring 2.0 技术手册》是继 Spring 1.0 之后的重要著作,作者林信良针对 Spring 框架在 2.0 版本中的新特性进行了深入剖析与讲解。本书不仅适合于已经有一定 Java 开发基础的学习者,也适用于想要深入了解 Spring ...
### Spring 2.0 声明式事务配置详解 #### 一、Spring 2.0 声明式事务概述 随着 Spring 框架的发展,从 Spring 1.x 到 Spring 2.0 版本,声明式事务管理方式有了显著改进。在 Spring 1.x 中,主要通过 AOP 方式实现...
8. **AOP增强**:Spring 2.0的AOP功能允许开发者定义切面,用于封装横切关注点,如日志、事务管理等。通过声明式AOP,开发者可以在不修改业务代码的情况下,实现这些关注点的插入。 9. **数据访问支持**:Spring ...
根据给定文件的信息,本文将详细介绍如何配置Struts2.1.6、Spring2.0与Hibernate3.1这三个框架的整合开发环境。这是一套经典的MVC(Model-View-Controller)架构组合,适用于构建复杂的Java Web应用程序。 ### 一、...
### Spring2.0精简笔记知识点解析 #### 一、Spring基础知识 1. **Spring简介:** - **Spring框架**是一种轻量级Java开发框架,主要用来简化企业级应用的开发过程。它通过一系列的设计模式(如依赖注入DI、面向切...
综上所述,Spring2.0文档提供了关于IoC容器的深入理解,包括BeanFactory和ApplicationContext的不同特点,以及如何配置和使用这些容器来管理对象的生命周期。通过对这些知识点的学习,开发者可以更好地理解和利用...
### Spring AOP 配置切面实例解析 #### 一、引言 本文将通过一个具体的例子来介绍如何在Spring框架中使用面向切面编程(Aspect Oriented Programming, AOP)。我们将关注如何定义一个切面(Aspect),以及如何在...
本篇将详细讲解如何将Spring 3.0.5与JPA 2.0(基于Hibernate 3.6)进行集成,以构建高效、灵活的应用程序。 首先,让我们了解Spring 3.0.5的核心特性。Spring 3.0引入了若干改进和新特性,包括对JSR-303(Bean ...
自 Spring 2.0 起,推荐使用基于 XML Schema 的配置方式,这种方式比传统的 DTD 基础配置更为灵活。一个典型的 Spring 2.5 配置文件至少会包含以下结构: ```xml <?xml version="1.0" encoding="UTF-8"?> ...
4. **整合Spring和Hibernate**:通过Spring管理Hibernate SessionFactory,并在Service层注入Session,实现事务管理。 5. **整合Spring和Struts**:使用Spring的Struts2插件,将Spring的bean注入到Action类中,实现...
Spring配置全书中,作者Craig Walls深入探讨了Spring的各种配置技术,包括bean的定义、依赖注入的实现方式、AOP(面向切面编程)、事务管理、数据访问集成(如JDBC、ORM框架)以及Spring MVC等。此外,他还提到了...
2004年,Spring 1.0版本正式发布,引入了核心的IoC容器和AOP特性。随后的2006年,Spring 2.0带来了重大改进,支持JSR-250注解、Java 5的枚举类型以及更多模块化设计。2009年,Spring 3.0发布,全面支持Java EE 6,...
- **2004年**:Spring框架1.0正式发布。 - **2005年**:Spring框架2.0发布,增加了对Java 5的支持。 - **2015年3月**:Spring框架4.1.6发布,这是本教程所基于的版本。 - **后续版本**:Spring框架持续发展,引入了...
"livebookstore-with-hsqldb-1.0.zip" 是一个包含此类系统的压缩包,它利用了Spring 2.0框架、UML建模语言以及SSH(Struts、Spring、Hibernate)技术栈,同时还集成了轻量级数据库HSQldb。这个项目为我们提供了深入...
通过对上述Spring配置文件的分析,我们可以了解到Spring框架是如何通过XML配置来管理Bean、实现依赖注入、配置事务管理等功能的。掌握这些基础知识对于使用Spring框架进行开发非常重要。 此外,还需要注意的是,...
选择Spring的版本(例如Spring2.0),并勾选所需的配置项。完成后点击"Finish"。 之后,配置Hibernate。在MyEclipse中,同样右键点击工程,选择Hibernate的相关选项。在此过程中,需要指定数据库的版本、数据库名称...
2021年发布了Spring 1.0测试版,后续不断更新,如2021年的Spring 2.0,2021年的Spring 2.5,直至2021年的Spring 3.1。Spring 3.1.3是截至描述时的最新版本。Spring的发展旨在提供更高效、灵活和易于部署的解决方案,...
在IT行业中,构建高效、可维护的企业级应用是至关重要的,而"目录树(Ext.2.0)"的标题和描述暗示了这是一个基于Struts1.0、Spring2.0、Hibernate3.0和Ext.2.0技术栈的项目。这四个组件都是Java开发中的关键工具,它们...
- **面向切面编程(Aspect-Oriented Programming, AOP)**:通过 AOP,可以在不修改业务逻辑的情况下添加横切关注点(如日志记录、事务管理等)。 - **模块化设计**:Spring 框架由多个模块组成,包括核心容器、数据...