- 浏览: 818543 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
yuhanwm910731:
我现在需要实现复选(非级联选择)的树形下拉菜单,麻烦发给我一份 ...
extjs3.X支持树型的下拉控件 -
shine1200:
“所以咱们现在设置的虚拟路径“/message/upload/ ...
weblogic虚拟路径的配置和使用(2) -
icefireforest:
Fangrn 写道jx_dream 写道楼主,我最近在做树形下 ...
extjs3.X支持树型的下拉控件 -
cloudfile:
谢谢分享!
c++库c#调用开发时需要注意的一点 -
xuweilinbegin:
我也要一份哦:xuweilin15353@163.com,谢谢 ...
extjs3.X支持树型的下拉控件
前几天被某公司“邀请”过去面试了一下,期中问及了一个简单的 spring2 和spring1 之间的区别,本来是作为j2ee程序员应该很了解这个的,可我却蒙了,spring2用过很多,1.0的却很少用过,出糗了,呵呵。今天回过头来还是查资料吧。
现在市面上很早就有介绍
Spring2.0的书籍,稍微谈一下Spring2.0的一些新特性好了。
1.引入基于Xml-Schema的配置语法,简化了Xml的配置
2.引入新的Bean作用域(request和session范围)
3.可扩展的容器级Xml配置(Spring官方文档将这个功能上升到了DSL级别)
4.AOP有了很大改进,更无缝地整合了AspectJ,为管理Spring容器外的对象提供了可能
5.JdbcTemplate的改进(增加了NamedParameterJdbcTemplate和SimpleJdbcTemplate)
6.更简单的事务配置
7.Spring Web MVC的大幅改进和增强(引入了CoC的观点和增强了的标签库)
8.Spring的Scheduling支持引入TaskExecutor抽象
9.支持JPA,支持异步JMS,更好的JMX支持
10.支持动态语言,JRuby,Groovy,BeanShell
就以上10大特性,接着分别展开介绍:
1.引入基于Xml-Schema的配置语法,简化了Xml的配置
在Spring1.x中,bean的xml配置采用xml-dtd的方式,2.x引入了xml-schema的方式(当然也完全支持先前的方式),这一引入大大简化了bean的xml配置烦琐程度。Spring容器提供了许多公用特性的namespace
(xml-schema的概念)定义方法,随便举几个例子:
a.定义集合:
Spring 1.x Style:
<bean id="emailList" class="org.springframework.beans.factory.config.ListFactoryBean">
<property name="sourceList">
<list>
<value>aa@hotmail.com</value>
<value>bb@hotmail.com</value>
</list>
</property>
</bean>
Spring 2.x Style:
<util:list id="emailList">
<value>aa@hotmail.com</value>
<value>bb@hotmail.com</value>
</util:list>
b.定义JNDI获取:
Spring 1.x Style:
<bean id="jndiBean" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jdbc/MyDataSource"/>
</bean>
Spring 2.x Style:
<jee:jndi-lookup id="jndiBean" jndi-name="jdbc/MyDataSource"/>
2.
引入新的Bean作用域(request和session范围)
可以记得,在Spring1.x中,bean只有singleton和prototype两种作用域,并且是通过singleton开关来控制的。而
2.x则引入了更多的作用域,并且其语法也发生了变化,在2.x中使用了scope元素来定义bean的作用域,从而废弃了singleton开关。当然
如果你希望使用之前的定义方法也完全可以,只是你必需使用Spring1.x的DTD。如下:
Spring 1.x Style:
<bean id="logingAction" class="demo.LoginAction" singleton="true"/>
Spring 2.x Style:
<bean id="logingAction" class="demo.LoginAction" scope="request(session|singleton..)"/>
关于这两个新引入的作用域背后,其实还有蛮多的学问,Spring官方文档就这个议题的DI(Dependency Injection)有一段比较详尽的描述,在此归纳一下:
要向目标bean注射作用域为request或session的源bean,必须提供出源bean的代理(容器才足以智能地获取到
作用域为
request或session的真实bean对象),像下面这样:
<!--源bean-->
<bean id="userRef" class="demo.User" scope="session">
<!--提供出源bean的代理-->
<aop:scoped-proxy/>
</bean>
<!--目标bean-->
<bean id="userManager" class="demo.UserManager" scope="singleton">
<!--向目标bean注射源bean的代理-->
<property name="userRef" ref="userRef"/>
</bean>
如果不提供出代理,则每次会获取到首次容器初始化的bean实例,这是不正确的,详见Spring官方文档。
3.可扩展的容器级Xml配置(Spring官方文档将这个功能上升到了DSL级别)
根据我的理解,使用了容器级这个修饰词,那么什么是容器级xml配置,简单来说就是Spring2.0提供出了一种手段,可通过Xml等手段来扩展容器的
功能。比如我可以书写一些Xml定义一些规则,然后插入容器中,当需要使用这些规则的时候,就可以简单地像通过使用容器默认提供的特性一样使用这些规则,
以xml-schema的形式。比如:<hello:say content="I am
Spirit.J"/>,显然<hello:say>是我自己定义的一套规则,而不是容器预定义的。这样看来,按照官方为Spring
贴金的说法,真的是有点DSL(Domain Specific Language)的味道,
有点寒了,不过如果让我来贴金的话,我认为还是DSC比较妥当(Domain Specific Container),毕竟Spring还没有上升到语言到高度。详见Spring官方文档
。
4.AOP有了很大改进,更无缝地整合了AspectJ,为管理Spring容器外的对象提供了可能
AOP一向是Spring的一大特色和亮点,Spring2.x带来了全新的AOP
feature,最大的改进是更加无缝地提供了对AspectJ的整合。<<精通Spring-Java轻量级架构开发实践>>
一书中,我曾在第三章详细介绍了AOP的概念以及AspectJ的开发,并在第六章花了很多笔墨介绍Spring
AOP。如果有些朋友不能很快入手Spring2.x的AOP,我建议可先阅读这本书。
如果没有Spring2.x的AspectJ支持,显然就需要通过AspectJ
特定的编译器,以完成AOP功能的织入。比如在Eclipse中,如果没有AJDT插件,就不能编译使用AspectJ。而Spring2.x的到来,改变了这一状况,于是现在我们多了很多选择,可以使用
AspectJ;可以通过@AspectJ(Spring2.x支持,需要
JDK5以上的Annotation
);可以使用Schema-base AOP(Spring2.x支持);也
可
以依然使用'朴素'的Spring AOP API和早先的AOP
Xml配置;稍微提一下@AspectJ的一个额外功能,现在Spring2.x可以通过@AspectJ来管理Spring容器外的任何对象了,比如
EJB,Servlet,POJO等等,这也是Spring官方推荐的管理容器外对象的方法。想了一下,这个功能实在是影响深远,更细致的介绍可以参考Spring官方文档。
5.JdbcTemplate的改进(增加了NamedParameterJdbcTemplate等)
还记得JdbcTemplate的易用吗?很快,Spring2.x又新增了几个JdbcTemplate以及相关的辅助
类,NamedParameterJdbcTemplate允许通过Map的名值对形式来定义Sql语句的参数了,这就使得我们可不仅仅受限于传统
JDBC以"?"带入Sql参数的方式了,
NamedParameterJdbcTemplate不仅允许直接使用Java.util.Map,还提供了一个简单的Map包装类MapSqlParameterSource,为动态构造Sql条件提供了捷径。比如:
public int getUserCount(final String user) {
String sql = "select count(*) from user
where firstname = :first_name
and lastname = :last_name";
NamedParameterJdbcTemplate tempate = new NamedParameterJdbcTemplate(this.getDataSource());
SqlParameterSource
params = new MapSqlParameterSource
();
params.addValue("first_name", user.getFirstName());
params.addValue("last_name", user.getLastName());
return tempate.quertForInt(sql, params);
}
此外,
SqlParameterSource接口还提供了一个实现:BeanPropertySqlParameterSource,它可根据JavaBean的属性来填充Sql条件的占位符,怎么看,这些个玩意儿都有点Ibatis的味道。
6.更简单的事务配置
可声明的事务配置,Spring的又一个亮点。籍由Spring2.x对AOP语法的改进以及AspectJ的整合,在Spring中声明事务不仅得到了简化,同时也变得更为强大。下面PetStore的例子一目了然:
Spring 1.x Style:
<bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<bean id="petStore" parent="baseTransactionProxy">
<property name="target">
<bean class="org.springframework.samples.jpetstore.domain.logic.PetStoreImpl">
...
</bean>
</property>
</bean>
Spring 2.x Style:
<bean id="petStore" class="org.springframework.samples.jpetstore.domain.logic.PetStoreImpl">
...
</bean>
<aop:config>
<aop:advisor pointcut="execution(* *..PetStoreFacade.*(..))" advice-ref="txAdvice"/>
</aop:config>
<tx:advice id="txAdvice">
<tx:attributes>
<tx:method name="insert*"/>
<tx:method name="update*"/>
<tx:method name="*" read-only="true"/>
</tx:attributes>
</tx:advice>
7.Spring Web MVC的大幅改进和增强(引入了CoC的观点和增强了的标签库)
Spring2.x中,Web部分尤其是Spring
MVC得到了长足的改进,不仅新增了很多JSP标签库(可参考spring-form.tld),而且对CoC(Convention Over
Configuration)的观点提供了明确支持。所谓CoC,即通过一定的组件命名规约,可减少配置和编码的数量,从而带来开发效率的上升,不过这个
偏编程美学的东西这里就不予介绍了,可详细参考Spring的官方文档。
8.Spring的Scheduling支持引入TaskExecutor抽象
还记得在Spring1.x中,通过使用Spring对Scheduling的支持觉得挺过瘾的,客户端编程和配置都非常方便。然而看了Spring2.x的发布包之后,发现1.x的支持实在少得可怜(有点像玩具包了,仅仅是JDK的Timer以及OpenSymphony的Quartz而已)。原来Spring2.x对Scheduling功能强化了很多,无论如何
Scheduling背后总有Multi Thread的概念,有了Multi Thread,自然而然会有
ThreadPool的实现。
引入TaskExecutor抽象,根据Spring官方的说明,
主要是为了摆脱对Java5的java.util.concurrent.Executor(
即Java5的ThreadPool实现
)的依赖。好了,现在
由于
Spring2.x背后的
Scheduling
Infrastructure足够抽象,为其注入不同的Muti
Thread实现方式或者ThreadPool实现都成为了可能,而不需要绑定在某几种实现上,可以使用Spring自己提供的ThreadPool;可
以使用第三方提供的开源解决方案比如Quartz的ThreadPool;也可以使用由商业Application
Server提供的更成熟的Thread Pool,Spring2.x目前提供了BEA和IBM都支持的CommonJ
WorkManager,因此引入
TaskExecutor抽象
是个出色的改进。
9.支持JPA,支持异步JMS,更好的JMX支持
Spring2.x开始支持JPA(Java Persistent
API),又一个持久层解决方案。在Spring2.x之前,只支持JMS的发送消息和同步接收消息,2.x开始支持异步接收消息了。Spring2.x
开始支持JMX的Notification模型,开始支持声明式的控制MBean向MBeanServer的注册(不明白JMX的朋友可以参考
<<精通Spring-Java轻量级架构开发实践>>一书
)。详细内容请参考Spring官方文档。
10.支持动态语言,JRuby,Groovy,BeanShell
Spring2.x开始支持动态语言了,这充分表明了Spring集大成,集最新流行技术的一贯态度和野心。首先稍微讲讲静态动态语言的概念,简单来说静
态语言大致在编译期决定行为,参数变量需要事先声明类型,并且一经声明不可改变,Java,C#,C++都是静态语言;而动态语言则在程序运行期决定行
为,参数变量一般无需事先声明类型,也可随意改变,甚至无需编译,因此脚本化、代码量少、开发效率高是动态语言的一些特征,现在火到不行的RoR,还有这
里讲的三种语言都是动态语言的范畴。静动态语言优劣这里不介绍了。
Spring2.x充分肯定了动态语言的优势,另外给出了一个功能我非常感兴趣,Spring2.0系列已经可以通过动态脚本来配置Spring
MVC
Controller和Validator了,这就意味着Spring的xml配置在将来可以更多地实施动态脚本控制。Spring官方对这个
feature的命名是"dynamic-language-backed bean",详细内容可参考Spring官方文档。
发表评论
-
提供IT系统运维支持、系统优化方案
2012-10-26 14:46 6提供IT系统运维支持、系统优化方案,有多个运维实施经验。 ... -
Java指定编码读写文件(UTF-8)
2010-11-30 14:00 3133有时我们需要程序动态生成jsp文件,采取系统默认的编码操作的文 ... -
was6.0发布struts2项目异常
2010-11-18 18:39 2016[10-11-18 18:31:33:609 CST] 000 ... -
利用spring提供的字符编码过滤器
2010-11-14 11:55 2054<!-- spring的字符集过滤器 --> ... -
简单的几句CSS布局口诀
2010-11-10 16:41 1060简单的几句CSS布局口诀,就可以写出精简,标准的样式。 ... -
commons-email笔记
2010-11-10 14:38 1402import java.io.UnsupportedE ... -
如何解决 调用jar程序时出现 outofMemory的问题
2010-10-29 12:02 1279我们在调用 打包好的java程序时,如果程序要加载大量数据的话 ... -
GC策略的调优
2010-09-30 22:30 1656GC 策略在 G1 还没成熟的情况下,目前主要有串行、并 ... -
关于Spring和WebLogic版本兼容的一点小提示
2010-09-30 16:31 2100首先 WebLogic 的各个版本和 JDK 绑定的很紧, 或 ... -
删除WebLogic 10的缓存
2010-09-30 16:07 4672在WebLogic 10上部署了一个应用,最近作了更新并重新部 ... -
weblogic如何强制先加载web-inf/lib下的jar
2010-09-30 16:05 4832方法1: 修改WEB-INF\weblogic.xml (如 ... -
用Log4j自动生成日志
2010-09-27 13:28 1678Log4j是Apache基金会的一 ... -
java smslib发送短信
2010-09-10 10:02 1656public class SendMessage { ... -
Spring定时器的两种实现方式
2010-09-01 21:07 1534有两种流行Spring定时 ... -
使用 Commons-Email 在邮件内容中直接嵌入图片
2010-08-31 20:25 1362我们在发送邮件的时候,如果使用HTML在邮件内容中嵌入图片,& ... -
Struts2中转换Date类型的问题
2010-08-29 09:43 1396Web开发会涉及到很多类型转换的情况。我们知道,页面中的一切值 ... -
java smslib 发送短信错误信息
2010-08-25 15:02 4274org.smslib.GatewayException: GS ... -
rxtx取代javax.comm实现Java跨平台设备端口通信
2010-08-24 08:53 2189From Rxtx <!-- start conte ... -
javascript汉字转拼音代码
2010-08-22 08:21 4612使用方法(1):pinyin.go('汉字'); //例:张家 ... -
关于IE等浏览器在下载JAR文件时的,将后缀更改为zip等问题及解决方案
2010-08-03 12:19 1238httpd.conf这个文件中的mime.types上面,打开 ...
相关推荐
《Eclipse for Spring 2.0 新特性解析与实践指南》 在软件开发领域,Spring框架作为Java EE应用中的核心框架之一,深受开发者喜爱。Eclipse for Spring是Eclipse IDE针对Spring框架定制的一个插件,它极大地提升了...
《Spring 2.0 技术手册》是继 Spring 1.0 之后的重要著作,作者林信良针对 Spring 框架在 2.0 版本中的新特性进行了深入剖析与讲解。本书不仅适合于已经有一定 Java 开发基础的学习者,也适用于想要深入了解 Spring ...
这份源代码集合是配合书籍《Spring2.0宝典》使用的,读者可以通过实际操作代码来理解和掌握Spring 2.0的核心特性和应用场景。光盘中包含的“codes”文件夹,极有可能包含了书中各个章节的示例代码,覆盖了Spring 2.0...
《Eclipse for Spring 2.0 新特性详解》 Eclipse for Spring 2.0 是一个专门为Spring框架提供集成开发环境(IDE)的扩展,它极大地提升了开发人员在使用Spring框架时的效率和便利性。这个版本带来了诸多新功能和...
本手册和使用指南提供了全面的Spring 2.0相关知识,包括其核心特性、配置方式以及如何在实际项目中应用。 首先,让我们深入了解一下Spring框架的核心概念。Spring的依赖注入(Dependency Injection,简称DI)是一种...
总结,这份中文版的Spring 2.0技术文档全面覆盖了Spring框架的主要特性和使用方法,是开发者深入学习和掌握Spring 2.0不可或缺的工具。通过阅读和实践文档中的示例,开发者可以更好地理解如何利用Spring 2.0解决实际...
Spring 2.0是Spring框架的一个重要版本,它在Java企业级应用开发中扮演着核心角色。本教程将深入探讨...文档`spring2.0-reference_final_zh_cn.chm`将详细阐述这些概念和技术,帮助你成为一名熟练的Spring开发者。
Spring框架是Java开发中不可或...总结,Spring 2.0是一个功能强大且成熟的框架,其依赖注入、AOP、Web MVC等特性使得Java企业级应用开发变得更加高效和灵活。了解并熟练掌握这些知识点,对于提升Java开发能力至关重要。
### SPRING2.0开发详解 #### 一、Spring框架简介 Spring框架是一个开源的Java平台,用于构建企业级应用程序和服务。它最初由Rod Johnson在2004年创建,并随着时间的发展不断壮大和完善。Spring 2.0版本是Spring...
在Spring 2.0版本中,引入了许多重要的改进和新特性,使得开发者能够更加高效地进行开发工作。以下是对Spring 2.0的一些关键知识点的详细解释: 1. **依赖注入 (Dependency Injection, DI)**:Spring 2.0继续强化了...
《Spring 2.0 中文参考手册》是一个详尽阐述 Spring 框架核心特性和扩展功能的重要资源,尤其对于中文开发者来说,它提供了一条理解 Spring 2.0 版本的关键途径。Spring 是一个广泛应用的 Java 开发框架,以其模块化...
本书介绍了Spring 2.0的新特性,诸如Spring 2.0的新配置、新AOP支持、增强的IoC、JDBC和form标签等新功能。它通过实际完成一个完整的Spring项目示例,展示了与Spring相关API的使用技巧,能够显著减少每一位入门者...
这个版本引入了许多新特性,增强了框架的功能和灵活性。本文将深入探讨Spring 2.0源代码中的关键知识点,帮助开发者理解其内部机制。 1. **依赖注入(Dependency Injection, DI)**:Spring 2.0进一步完善了依赖注入...
本书介绍了Spring 2.0的新特性,诸如Spring 2.0的新配置、新AOP支持、增强的IoC、JDBC和form标签等新功能。它通过实际完成一个完整的Spring项目示例,展示了与Spring相关API的使用技巧,能够显著减少每一位入门者...
Spring 2.0 技术手册是学习 Spring 2.0 的重要参考资料之一,它不仅详细介绍了 Spring 2.0 的各项特性和新增功能,还提供了大量的示例代码和最佳实践指导。对于想要深入了解 Spring 框架及其在企业级应用中作用的...
首先,Spring 2.0是一个重要的版本升级,引入了许多新特性和改进,旨在提高开发效率和应用的可测试性。其中,最重要的更新之一是支持JSR-250的`@ManagedBean`和`@PostConstruct`注解,使得bean的管理更加简洁。在源...
总的来说,《Spring2.0技术手册_林信良》是一本全面而深入的教程,涵盖了Spring 2.0的主要特性和用法。通过阅读本书,开发者不仅可以学习到Spring的基础知识,还能了解到如何在实际项目中有效地运用Spring框架,提升...
2. 高级特性实践:探索Spring Security、Spring WebSocket、Spring Boot等进阶主题,提升项目开发能力。 通过以上学习,你可以全面掌握Spring 2.0的核心技术和应用,为成为熟练的Spring开发者奠定坚实的基础。在...