Spring3.0新特性

umltool 14年前發布 | 11K 次閱讀 數據庫

一、首先,模塊的組織更加的細致,從那么多的jar分包就看的出來: 

Spring的構建系統以及依賴管理使用的是Apache Ivy,從源碼包看出,也使用了Maven 
Maven確實是個好東西,好處不再多言,以后希望能進一步用好它。 

二、新特性如下: 
Spring Expression Language
Spring表達式語言) 
IoC enhancements/Java based bean metadata
Ioc增強/基于Javabean元數據) 
General-purpose type conversion system and UI field formatting system
(通用類型轉換系統和UI字段格式化系統) 
Object to XML mapping functionality (OXM) moved from Spring Web Services project
(對象到XML映射功能從Spring Web Services項目移出) 
Comprehensive REST support
(廣泛的REST支持) 
@MVC additions
@MVC增強) 
Declarative model validation
(聲明式模型驗證) 
Early support for Java EE 6
(提前對Java EE6提供支持) 
Embedded database support
(嵌入式數據庫的支持) 

三、針對Java 5的核心API升級 
1
BeanFactory接口盡可能返回明確的bean實例,例如: 
      T getBean(String name, Class requiredType)
 
      Map getBeansOfType(Class type)
 
      Spring3
對泛型的支持,又進了一步。個人建議泛型應該多用,有百利而無一害! 
2
SpringTaskExecutor接口現在繼承自java.util.concurrent.Executor 
   擴展的子接口AsyncTaskExecutor支持標準的具有返回結果FuturesCallables 
   任務計劃,個人還是更喜歡Quartz 
3
、新的基于Java5APISPI轉換器 
   無狀態的ConversionService Converters 
   取代標準的JDK PropertyEditors 
   類型化的ApplicationListener,這是一個實現觀察者設計模式使用的事件監聽器。 
   基于事件的編程模式,好處多多,在項目中應該考慮使用,基于事件、狀態遷移的設計思路,有助于理清軟件流程,和減少項目的耦合度。 

四、Spring表達式語言 
Spring
表達式語言是一種從語法上和統一表達式語言(Unified EL)相類似的語言,但提供更多的重要功能。
它可以在基于
XML配置文件和基于注解的bean配置中使用,并作為基礎為跨Spring portfolio平臺使用表達式語言提供支持。 

接下來,是一個表達式語言如何用于配置一個數據庫安裝中的屬性的示例: 

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

如果你更愿意使用注解來配置你的組件,那么這種功能同樣可用:

@Repository public class RewardsTestDatabase 
      @Value(
"#{systemProperties.databaseName}"
      
public void setDatabaseName(String dbName) { … } 
     
      @Value(
"#{strategyBean.databaseKeyGenerator}"
      
public voidsetKeyGenerator(KeyGenerator kg) { … } 
}
 

又多一種表達式語言,造輪子的運動還在繼續中! 

五、基于Javabean元數據 
JavaConfig
項目中的一些核心特性已經集成到了Spring中來,這意味著如下這些特性現在已經可用了: 

@Configuration 
@Bean 
@DependsOn 
@Primary 
@Lazy 
@Import 
@Value 

這兒有一個例子,關于一個Java類如何使用新的JavaConfig特性提供基礎的配置信息: 

package org.example.config; 

@Configuration 
public class AppConfig 
    
private @Value("#{jdbcProperties.url}") String jdbcUrl; 
    
private @Value("#{jdbcProperties.username}") String username; 
    
private @Value("#{jdbcProperties.password}") String password; 

    @Bean 
    
public FooService fooService() 
        
return new FooServiceImpl(fooRepository()); 
    }
 

    @Bean 
    
public FooRepository fooRepository() 
        
return new HibernateFooRepository(sessionFactory()); 
    }
 

    @Bean 
    
public SessionFactory sessionFactory() 
        
// wire up a session factory 
        AnnotationSessionFactoryBean asFactoryBean = 
            
new AnnotationSessionFactoryBean(); 
        asFactoryBean.setDataSource(dataSource()); 
        
// additional config 
        return asFactoryBean.getObject(); 
    }
 

    @Bean 
    
public DataSource dataSource() 
        
return new DriverManagerDataSource(jdbcUrl, username, password); 
    }
 
}
 

為了讓這段代碼開始生效,我們需要添加如下組件掃描入口到最小化的應用程序上下文配置文件中:

<context:component-scan base-package="org.example.config"/> 
<util:properties id="jdbcProperties" location="classpath:org/example/config/jdbc.properties"/> 


六、在組件中定義bean的元數據 
感覺Spring提供了越來越多的注解、元數據,復雜性已經超出了當初帶來的方便本身! 

七、通用類型轉換系統和
UI字段格式化系統 

Spring3
加入了一個通用的類型轉換系統,目前它被SpEL用作類型轉換,并且可能被一個Spring容器使用,用于當綁定bean的屬性值的時候進行類型轉換。 
另外,還增加了一個UI字段格式化系統,它提供了更簡單的使用并且更強大的功能以替代UI環境下的JavaBeanPropertyEditors,例如在SpringMVC中。 
這個特性要好好研究下,通用類型轉換系統如果果如所言的話,帶來的好處還是很多的。
 
八、數據層 
對象到XML的映射功能已經從Spring Web Services項目移到了Spring框架核心中。它位于org.springframework.oxm包中。 
OXM?
研究下!時間真不夠! 

九、Web 
Web層最激動人心的新特性莫過于新增的對構件REST風格的web服務和web應用的支持!另外,還新增加了一些任何web應用都可以使用的新的注解。 
服務端對于REST風格的支持,是通過擴展既有的注解驅動的MVC web框架實現的。 
客戶端的支持則是RestTemplate類提供的。 
無論服務端還是客戶端REST功能,都是使用HttpConverter來簡化對HTTP請求和應答過程中的對象到表現層的轉換過程。 
MarshallingHttpMessageConverter
使用了上面提到的對象到XML的映射機制 

十、@MVC增強 
新增了諸如@CookieValue @RequestHeaders這樣的注解等。 

十一、聲明式模型驗證 
支持JSR 303,使用Hibernate Validator作為實現。 

十二、提前對Java EE6提供支持 
提供了使用@Async注解對于異步方法調用的支持(或者EJB 3.1里的 @Asynchronous 另外,新增對JSR 303, JSF 2.0, JPA 2.0等的支持。 

十三、嵌入式數據庫的支持 
對于嵌入式的Java數據庫引擎提供了廣泛而方便的支持,諸如HSQL, H2, 以及Derby等。 
這是不是代表一種潮流呢?數據庫向越來越小型化發展,甚至小型化到嵌入式了,我認為這在桌面級應用上還是很有市場的。

 本文由用戶 umltool 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!