Spring4新特性——泛型限定式依賴注入

Spring4新特性——泛型限定式依賴注入 html

Spring4新特性——核心容器的其餘改進 git

Spring4新特性——Web開發的加強 github

Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC  spring

Spring4新特性——Groovy Bean定義DSL 框架

Spring4新特性——更好的Java泛型操做API  socket

Spring4新特性——JSR310日期API的支持 測試

Spring4新特性——註解、腳本、任務、MVC等其餘特性改進  this

 

Spring 4.0已經發布RELEASE版本,不只支持Java8,並且向下兼容到JavaSE6/JavaEE6,並移出了相關廢棄類,新添加如Java8的支 持、Groovy式Bean定義DSL、對核心容器進行加強、對Web框架的加強、Websocket模塊的實現、測試的加強等。其中兩個我一直想要的增 強就是:支持泛型依賴注入、對cglib類代理再也不要求必須有空參構造器了。具體更新請參考: spa

http://docs.spring.io/spring/docs/4.0.0.RELEASE/spring-framework-reference/htmlsingle/#new-in-4.0 .net

 

一、相關代碼:

1.一、實體

Java代碼   收藏代碼
  1. public class User implements Serializable {  
  2.     private Long id;  
  3.     private String name;  
  4. }  
  5.   
  6. public class Organization implements Serializable {  
  7.     private Long id;  
  8.     private String name;  
  9. }  

 1.二、Repository

Java代碼   收藏代碼
  1. public abstract class BaseRepository<M extends Serializable> {  
  2.     public void save(M m) {  
  3.         System.out.println("=====repository save:" + m);  
  4.     }  
  5. }  
  6.   
  7. @Repository  
  8. public class UserRepository extends BaseRepository<User> {  
  9. }  
  10.   
  11. @Repository  
  12. public class OrganizationRepository extends BaseRepository<Organization> {  
  13. }  

 對於Repository,咱們通常是這樣實現的:首先寫一個模板父類,把通用的crud等代碼放在BaseRepository;而後子類繼承後,只須要添加額外的實現。

 

1.三、Service

1.3.一、之前Service寫法

Java代碼   收藏代碼
  1. public abstract class BaseService<M extends Serializable> {  
  2.     private BaseRepository<M> repository;  
  3.     public void setRepository(BaseRepository<M> repository) {  
  4.         this.repository = repository;  
  5.     }  
  6.     public void save(M m) {  
  7.         repository.save(m);  
  8.     }  
  9. }  
  10. @Service   
  11. public class UserService extends BaseService<User> {  
  12.     @Autowired  
  13.     public void setUserRepository(UserRepository userRepository) {  
  14.         setRepository(userRepository);  
  15.     }  
  16. }  
  17.   
  18. @Service   
  19. public class OrganizationService extends BaseService<Organization> {  
  20.     @Autowired  
  21.     public void setOrganizationRepository(OrganizationRepository organizationRepository) {  
  22.         setRepository(organizationRepository);  
  23.     }  
  24. }  

 

能夠看到,之前必須再寫一個setter方法,而後指定注入的具體類型,而後進行注入;

 

1.3.二、泛型Service的寫法

Java代碼   收藏代碼
  1. public abstract class BaseService<M extends Serializable> {  
  2.     @Autowired  
  3.     protected BaseRepository<M> repository;  
  4.   
  5.     public void save(M m) {  
  6.         repository.save(m);  
  7.     }  
  8. }  
  9.   
  10. @Service   
  11. public class UserService extends BaseService<User> {  
  12. }  
  13.   
  14. @Service   
  15. public class OrganizationService extends BaseService<Organization> {  
  16. }  

 

 你們能夠看到,如今的寫法很是簡潔。支持泛型式依賴注入。

 

這個也是我以前很是想要的一個功能,這樣對於那些基本的CRUD式代碼,能夠簡化更多的代碼。

 

 

若是你們用過Spring data jpa的話,之後注入的話也可使用泛型限定式依賴注入 :

Java代碼   收藏代碼
  1. @Autowired  
  2. private Repository<User> userRepository;  

 

 對於泛型依賴注入,最好使用setter注入,這樣萬一子類想變,比較容易切換。好比https://github.com/zhangkaitao/es,若是有多個實現時,子類可使用@Qualifier指定使用哪個。

相關文章
相關標籤/搜索