spring3.0.M4 新特性介绍

2009年8月10日,spring发布了3.0的第四个里程碑版本,这是继5月6日M3之后的又一次比较大的更新。从发布时间来看,spring在新版本的发布方面的确是非常谨慎,正式版的发布估计要等到今年晚些时候了。废话少说,下面开始看看M4当中有哪些新的东东。(注:文中的大部分代码来自于spring-framework-reference)。

Spring整体架构:

[img]/upload/attachment/140338/2a547f01-97ab-38ea-8646-859ea9b88da3.jpg[/img]

其主要新功能有:
* Spring表达式语言(SpEL)
* REST支持
* SpringMVC annotation 的增强
* 嵌入式数据库支持
* 等等

[b]一、模块组织方式的改变 [/b]
此次的发行包中未包含此前版本中的spring.jar,在以后也不会提供该jar,spring也支持用户“按需所取”。这也意味着spring已经全面支持OSGi了。
各发行包的大致描述如下:
org.springframework.asm-3.0.0.M4.jar: 提供对ASM(一个字节码框架)的简单封装
org.springframework.expression-3.0.0.M4.jar: spring表达式语言
org.springframework.test-3.0.0.M4.jar: spring提供的一个测试框架
org.springframework.jdbc-3.0.0.M4.jar: 对JDBC的简单封装
org.springframework.orm-3.0.0.M4.jar: 整合第三方的ORM框架,如hibernate,ibatis,jdo,以及spring的JPA实现
org.springframework.transaction-3.0.0.M4.jar: 为JDBC、Hibernate、JDO、JPA等提供的一致的声明式和编程式事务管理
org.springframework.web.servlet-3.0.0.M4.jar: SpringMVC
org.springframework.jms-3.0.0.M4.jar: 为简化JMS API的使用而作的简单封装
org.springframework.beans-3.0.0.M4.jar: SpringIoC的基础实现
org.springframework.core-3.0.0.M4.jar: 提供的基础核心功能
org.springframework.context-3.0.0.M4.jar: 提供在基础IoC功能上的扩展服务,此外还提供许多企业级服务的支持,如邮件服务、任务调度、JNDI定位、EJB集成、远程访问、缓存以及各种视图层框架的封装等
org.springframework.aop-3.0.0.M4.jar: Spring的AOP实现
org.springframework.aspects-3.0.0.M4.jar: 提供对AspectJ框架的整合

[b]二、Spring表达式语言(SpEL)介绍[/b]
SpEL提供与OGNL、MVEL类似的功能,它可以用在配置文件中,也可以在程序中单独使用,其支持的功能有:字面量表达式、布尔型和关系式操作、正则表达式、类表达式、操作集合、关系操作符、方法调用、变量操作等。
一些实例:


ExpressionParser parser = new SpelExpressionParser();
Expression exp = parser.parseExpression("'Hello World'");
String message = (String) exp.getValue();


message的值为 Hello World


ExpressionParser parser = new SpelExpressionParser();
Expression exp = parser.parseExpression("'Hello World'.concat('!')");
String message = (String) exp.getValue();


message的值为 Hello World!

还可以这样:


Expression exp = parser.parseExpression("'Hello World'.bytes");
byte[] bytes = (byte[]) exp.getValue();

Expression exp = parser.parseExpression("new String('hello world').toUpperCase()");
String message = exp.getValue(String.class);

boolean trueValue = parser.parseExpression("2 == 2").getValue(Boolean.class);
int three = parser.parseExpression("7 % 4").getValue(Integer.class); // 3


用于方法调用:


public abstract class StringUtils {
public static String reverseString(String input) {
StringBuilder backwards = new StringBuilder();
for (int i = 0; i < input.length(); i++){
backwards.append(input.charAt(input.length() - 1 - i));
}
return backwards.toString();
}
}



ExpressionParser parser = new SpelExpressionParser();
StandardEvaluationContext context = new StandardEvaluationContext();
context.registerFunction("reverseString",
StringUtils.class.getDeclaredMethod("reverseString",
new Class[] { String.class }));
String helloWorldReversed =
parser.parseExpression("#reverseString('hello')").getValue(context, String.class);


在配置文件中的使用:


<bean class="mycompany.RewardsTestDatabase">
<property name="databaseName" value="#{systemProperties.databaseName}"/>
<property name="keyGenerator" value="#{strategyBean.databaseKeyGenerator}"/>
</bean>


[b]三、SpringMVC的增强:[/b]
几个核心注解都有所增强,如@RequestMapping。
一些实例:


@RequestMapping(value="/owners/{ownerId}", method=RequestMethod.GET)
public String findOwner(@PathVariable String ownerId, Model model) {
Owner owner = ownerService.findOwner(ownerId);
model.addAttribute("owner", owner);
return "displayOwner";
}


匹配请求为 /owners/fred


@RequestMapping(value="/owners/{ownerId}/pets/{petId}", method=RequestMethod.GET)
public String findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {
Owner owner = ownerService.findOwner(ownderId);
Pet pet = owner.getPet(petId);
model.addAttribute("pet", pet);
return "displayPet";
}


匹配请求为: /owners/42/pets/21


@Controller
@RequestMapping("/owners/{ownerId}")
public class RelativePathUriTemplateController {
@RequestMapping(value = "/pets", method = RequestMethod.POST, headers="content-type=text/*")
public void addPet(Pet pet, @PathVariable String ownerId) {
// implementation omitted
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值