Spring4新特性簡述


Spring是一個java世界中極其流行 的開源框架。Spring的初衷是降低企業級開發的復雜性,並試圖通過POJO對象實現之前EJB這類重型框架才能實現的功能。Spring不僅僅對服務 端開發有用,任何Java應用都可受益於Spring的簡潔、易測試和低耦合等特性。

Spring框架中使用beansJavaBeans來表示應用程序中的組件,但這並不意味着該組件必須嚴格滿足Java Bean的規范。
Spring做了很多事情,但是歸根到底是一些基本的思路,而所有這些思路最終都導向Spring的使命:簡化Java開發
Spring通過下列四種策略來簡化Java開發:
基於POJO的輕量級、最小侵入式開發;
通過依賴注入和面向接口編程實現松耦合;
通過面向切面編程和慣例實現聲明式編程;
通過面向切面編程和模板消除樣板式代碼
按照功能划分,這些模塊可以分成六組,如下圖所示:

這些模塊幾乎可以滿足所有企業級應用開發的需求,但是開發人員並不需要完全使用Spring的這些模塊,可以自由選擇符合項目需求的第三方模塊——Spring為一些第三方模塊提供了交互接口。
CORE SPRING CONTAINER
Spring框架的核心模塊,其他所有模塊都基於該模塊構建。Spring容器負責管理Spring應用中bean的創建、配置和管理。在這模塊中有Spring bean factory,該接口提供了最基本的依賴注入(DI)功能;基於bean factory,該模塊提供了集中Spring應用上下文的實現,可以供開發人員選擇。
除了bean factory和application context,該模塊還支持其他企業級服務,例如email、JNDI access、EJB integration和scheduling。
SPRING's AOP MODULE
Spring框架通過AOP模塊提供面向切面編程的能力。通過AOP模塊,一些系統層面的需求(事務、安全)可以與它們真正要作用到的模塊相互解耦合。
DATA ACCESS AND INTEGRATION
Spring的JDBC和data-access object模塊將數據庫操作的一些樣板式代碼封裝起來,免去了開發人員的很多工作量。這個模塊還對數據庫層的異常進行了封裝,並向上提供含義更豐富的異常信息。
Spring並未實現自己的ORM框架,但是它提供了跟其他幾個ORM框架整合的能力,例如Hibernate、Mybatis、Java Persistence AP等等,而且這些ORM框架都支持使用Spring提供的事務管理模塊。
WEB AND REMOTING
Spring提供了自己的 WEB開發框架——Spring MVC,除此之外,這個模塊還提供遠程調用支持:Remote Method Invocation(RMI)、Hessian、Burlap和JAX-WS。
INSTRUMENTATION
不常使用
TESTING
可以與常用的JUNIT、Mockito、Spock等測試框架整合使用。
spring4新特性
spring4.x不僅支持Java8,而且向下兼容到JavaSE6/JavaEE6,並移出了相關廢棄類,新添加如Java8的支持、Groovy式Bean定義DSL、對核心容器進行增強、對Web框架的增強、Websocket模塊的實現、測試的增強等。
這里簡單列舉下實際中用得多的地方:
支持map,list注入
@Autowired
private Map<String,MyService> map;
@Autowired

private List<MyService> list;

對於map,會將所有類型為MyService的bean以bean的name為key注入到map
對於list,會注入所有MyService類型的bean
基於CGLIB的類代理不再要求類必須有空參構造器了:
這是一個很好的特性,使用構造器注入有很多好處,比如可以只在創建Bean時注入依賴,然后就不變了,如果使用setter注入,是允許別人改的.
WEB開發增強
為了方便Rest開發,通過新的@RestController指定在控制器上,這樣就不需要在每個@RequestMapping方法上加@ResponseBody了。而且添加了一個AsyncRestTemplate,支持REST客戶端的異步無阻塞支持.

@RestController
public class UserController {
private UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
@RequestMapping("/test")
public User view() {
User user = new User();
user.setId(1L);
user.setName("haha");

return user;
}
}

提供AsyncRestTemplate用於客戶端非阻塞異步支持。
服務器端

@RestController
public classUserController {
private UserService userService;
@Autowired
publicUserController(UserService userService) {
this.userService = userService;
}
@RequestMapping("/api")
publicCallable api() {
System.out.println("=====hello");
return new Callable() {
@Override
publicUser call()throwsException {
Thread.sleep(10L *1000);//暫停兩秒
User user =new User();
user.setId(1L);
user.setName("haha");
return user;
}
};
}
}

客戶端

public static void main(String[] args) {
AsyncRestTemplate template =new AsyncRestTemplate();
//調用完后立即返回(沒有阻塞)
Listenable<Future> future= template.getForEntity("http://localhost:9080/spring4/api", User.class);
//設置異步回調
future.addCallback(new ListenableFutureCallback>() {
@Override
public void onSuccess(ResponseEntity result) {
System.out.println("======client get result : "+ result.getBody());
}
@Override
public void onFailure(Throwable t) {
System.out.println("======client failure : "+ t);
}
});
System.out.println("==no wait");
}

此處使用Future來完成非阻塞,這樣的話我們也需要給它一個回調接口來拿結果; Future和Callable是一對,一個消費結果,一個產生結果。調用完模板后會立即返回,不會阻塞;有結果時會調用其回調.
Bean Validate新特性
支持跨參數驗證(比如密碼和確認密碼的驗證)和支持在消息中使用EL表達式,其他的還有如方法參數/返回值驗證、CDI和依賴注入、分組轉換等。
其他的一些改進:
1、核心部分基本上無變化,提供了DirectFieldAccessor用於直接字段訪問、yaml配置、SpEL的字節碼編譯化、BackOff退避算法的基本實現、Base64Utils、SmartInitializingSingleton等;
2、在任務調度和事件機制上加入了異常處理部分;
3、cache部分加入jcache的集成、類級別的@CacheConfig的支持、CacheResolver;
4、mvc部分提供了一些視圖解析器的mvc標簽實現簡化配置、提供了GroovyWebApplicationContext用於Groovy web集成、提供了Gson、protobuf的HttpMessageConverter、靜態資源處理方面添加了resolver和transformer、提供了對groovy-templates模板的支持、JSONP的支持、對Jackson的@JsonView的支持等;
5、提供了頁面自動化測試框架Spring MVC Test HtmlUnit;
6、test部分提供了更便利的@sql標簽來執行測試腳本的初始化、MockRestServiceServer對AyncRestTemplate支持、MockMvcConfigurer來全局配置MockMvc;
7、提供了對Java8 Optional的支持(ObjectToOptionalConverter實現;可以在MVC中如@RequestParam等注解的綁定)、從Spring 4.1起Ehcache支持需要EhCache 2.5或更高版本、兼容Quartz 2.1.4、支持javax.annotation.Priority(等價於@Order)、JMS API的增強、SpringJUnit4ClassRunner需要 JUnit 4.9或更高版本支持。
總體來說沒有大的變化,只是一些增強,因此我們升級是很容易的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM