Spring3.0的变更(2):特性
[续上篇http://liuu.iteye.com/blog/479438]
3、新特性及功能增强
我最关注的,是Spring3能带来哪些新的功能变化:
1、迁移到Java5
由于完全基于Java5构建了,应该很多接口增加了泛型的支持,如getBean()后可以不用再转型了,任务执行器继承了Java5的Executor。
2、新增Spring表达式语言,简称SpEL
Spring终于支持了在配置文件中使用表达式语言,而不再是简单的属性文件变量,这应该是一个不错的特性。不只是配置文件,注解里也支持EL。
3、支持以Java代码+注解方式来配置元数据
曾记得在07年的时候,发现Spring推出一个有意思的子项目JavaConfig,它不使用XML,而是采用Java的类和方法,来定义容器和Bean,感觉很新颖。不过当时想来,用代码来配置,虽然能获得强类型检查的好处,防止配置输入错误,但是也失去了最大的好处:直接修改的灵活性。
时隔两年,Spring才在核心包里加入了这个特性,或许就是因为这个缺点。而之所以在3.0里加进来,最大的原因或许是由于SpEL,既然能够在注解里使用EL,那么灵活性就大大提高了,只要合理规划元数据结构,应该可以获得 强类型配置 + 灵活性变更的双重好处。Spring3发布后,JavaConfig + SpEL或许会成为一种较好的元数据定义方式。
4、对象到XML的映射
又是一个从子项目移入核心包的特性,对象XML隐射(OXM),来自WebServices子项目,提供JAXB、XmlBeans以及XStream等方式的实现。
5、全面的REST支持
包括服务端和客户端,提供了RestTemplate支持全功能的REST客户端,基于HttpClient。
6、注解声明式验证框架
支持自动发现HibernateValidator的jar,设置为对JSR303注解验证框架的实现。
JSR303的声明示例:
public class Person { @NotNull @Max(64) private String name; @Min(0) private int age; }
7、其他方面
自带嵌入式数据库(HSQL/H2)支持,做测试和演示时数据库,应该用起来更方便。
OK,先了解这些,具体的有用到了再研究吧。
但是
去年我就做了个简单的验证框架 ,基于Entry注解,保存或修改之前先校验,如果不通过,将信息写入ThreadLocal,带到页面层显示
这个可以自己包装;
DAOTemplate早就应该加入泛型机制了。
el表达式应该是不错的,这个在seam中使用的很好,我一直期待spring能够添加这个特性,
现在终于如愿了,就是不知道什么时候在开发中使用了。
我想spring的最大的好处就是可以灵活的配置你的系统,现在把这个移植到了JAVA代码中 不就是丢了这样的灵活性了吗?每次配置都要重新编译和发布,我觉得这个功能有一点多余。
我想spring的最大的好处就是可以灵活的配置你的系统,现在把这个移植到了JAVA代码中 不就是丢了这样的灵活性了吗?每次配置都要重新编译和发布,我觉得这个功能有一点多余。
xml配置对大型应用就是悲剧 你拆分再细里面还是一大堆bean
annotation反而更轻便 如果利用code gen可以更加规范
我想spring的最大的好处就是可以灵活的配置你的系统,现在把这个移植到了JAVA代码中 不就是丢了这样的灵活性了吗?每次配置都要重新编译和发布,我觉得这个功能有一点多余。
我曾经也有这样的想法,但是后来理解了。Spring是提倡基于接口编程,接口的实现的注入是通过配置实现,这样就达到了灵活的松耦合。注入实现及配置称为assembly,assembly绝大多数是通过编码人员去做的,也就是说大多数实现绑定是在编码时就决定了,需要切换实现的地方往往比较少。另外XML配置不方便IDE进行代码重构,比如对类或属性的重命名,XML的错误往往是在运行时才会被发现(而且出错信息经常晦涩难懂)。楼上说到的大系统的维护性也是XML的另一个问题。而Spring 3.0是可以通过XML配置去覆盖Java代码中的annation,所以说既方便了编码时的配置,也保留了系统的灵活性。
我想spring的最大的好处就是可以灵活的配置你的系统,现在把这个移植到了JAVA代码中 不就是丢了这样的灵活性了吗?每次配置都要重新编译和发布,我觉得这个功能有一点多余。
xml配置对大型应用就是悲剧 你拆分再细里面还是一大堆bean
annotation反而更轻便 如果利用code gen可以更加规范
弱弱的问一下 code gen 是什么意思?
看看Spring3文档里的一段示例:
public static class FieldValueTestBean @Value("#{ systemProperties['user.region'] }") private String defaultLocale; public void setDefaultLocale(String defaultLocale) { this.defaultLocale = defaultLocale; } Spring Framework 3.0 Reference Documentation 169 。。。