`
cwqcwq
  • 浏览: 74842 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

spring3.0.M4 新特性介绍

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

Spring整体架构:



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

一、模块组织方式的改变
此次的发行包中未包含此前版本中的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框架的整合

二、Spring表达式语言(SpEL)介绍
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>


三、SpringMVC的增强:
几个核心注解都有所增强,如@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
	}
}
  • 大小: 57.9 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics