2019独角兽企业重金招聘Python工程师标准>>>

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

Spring4新特性——核心容器的其他改进

Spring4新特性——Web开发的增强

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

Spring4新特性——Groovy Bean定义DSL

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

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

Spring4新特性——注解、脚本、任务、MVC等其他特性改进

Spring 4.0已经发布RELEASE版本,不仅支持Java8,而且向下兼容到JavaSE6/JavaEE6,并移出了相关废弃类,新添加如Java8的支持、Groovy式Bean定义DSL、对核心容器进行增强、对Web框架的增强、Websocket模块的实现、测试的增强等。其中两个我一直想要的增强就是:支持泛型依赖注入、对cglib类代理不再要求必须有空参构造器了。具体更新请参考:

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

1、相关代码:

1.1、实体

public class User implements Serializable {private Long id;private String name;
}public class Organization implements Serializable {private Long id;private String name;
}

 1.2、Repository

public abstract class BaseRepository<M extends Serializable> {public void save(M m) {System.out.println("=====repository save:" + m);}
}@Repository
public class UserRepository extends BaseRepository<User> {
}@Repository
public class OrganizationRepository extends BaseRepository<Organization> {
}

对于Repository,我们一般是这样实现的:首先写一个模板父类,把通用的crud等代码放在BaseRepository;然后子类继承后,只需要添加额外的实现。

1.3、Service

1.3.1、以前Service写法

public abstract class BaseService<M extends Serializable> {private BaseRepository<M> repository;public void setRepository(BaseRepository<M> repository) {this.repository = repository;}public void save(M m) {repository.save(m);}
}
@Service
public class UserService extends BaseService<User> {@Autowiredpublic void setUserRepository(UserRepository userRepository) {setRepository(userRepository);}
}@Service
public class OrganizationService extends BaseService<Organization> {@Autowiredpublic void setOrganizationRepository(OrganizationRepository organizationRepository) {setRepository(organizationRepository);}
}

可以看到,以前必须再写一个setter方法,然后指定注入的具体类型,然后进行注入;

1.3.2、泛型Service的写法

public abstract class BaseService<M extends Serializable> {@Autowiredprotected BaseRepository<M> repository;public void save(M m) {repository.save(m);}
}@Service
public class UserService extends BaseService<User> {
}@Service
public class OrganizationService extends BaseService<Organization> {
}

大家可以看到,现在的写法非常简洁。支持泛型式依赖注入。

这个也是我之前非常想要的一个功能,这样对于那些基本的CRUD式代码,可以简化更多的代码。

如果大家用过Spring data jpa的话,以后注入的话也可以使用泛型限定式依赖注入 :

@Autowired
private Repository<User> userRepository;

对于泛型依赖注入,最好使用setter注入,这样万一子类想变,比较容易切换。比如https://github.com/zhangkaitao/es,如果有多个实现时,子类可以使用@Qualifier指定使用哪一个。

转载于:https://my.oschina.net/qjx1208/blog/200800

Spring4新特性——泛型限定式依赖注入相关推荐

  1. Spring4新特性——Web开发的增强

    2019独角兽企业重金招聘Python工程师标准>>> Spring4新特性--泛型限定式依赖注入 Spring4新特性--核心容器的其他改进 Spring4新特性--Web开发的增 ...

  2. Spring4新特性——核心容器的其他改进

    2019独角兽企业重金招聘Python工程师标准>>> Spring4新特性--泛型限定式依赖注入 Spring4新特性--核心容器的其他改进 Spring4新特性--Web开发的增 ...

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

    http://sishuok.com/forum/blogPost/list/7798.html 在之前的<跟我学SpringMVC>中的<第七章 注解式控制器的数据验证.类型转换及 ...

  4. c#3.0加入的一些新特性——泛型集合

    c#3.0加入的一些新特性 1.泛型集合 2.隐式类型 3.自动实现属性 3.匿名方法 4.扩展方法 5.Lambda表达式 1.泛型集合 在.NET2.0中没有泛型集合定义集合用ArrayList定 ...

  5. c#2.0的新特性--泛型

    c#2.0中引入了许多新的语言特性:比较重要的有4个,泛型(Generics).匿名方法(Annorymous Methods).迭代器(Iterators).和局部类(Partial Types). ...

  6. C#2.0新特性-泛型

    C#2.0中引入了许多新的语言特性:比较重要的有4个,泛型(Generics).匿名方法(Annorymous Methods).迭代器(Iterators).和局部类(Partial Types). ...

  7. Spring4.1新特性——Spring MVC增强

    2019独角兽企业重金招聘Python工程师标准>>> 1.GroovyWebApplicationContext  在Spring 4.1之前没有提供Web集成的Applicati ...

  8. Spring IoC是如何进行依赖注入的

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 依赖注入(DI) DI(Dependency Injection) ...

  9. Spring 2.5新特性及架构图

    Spring2.5是Spring2.1各个里程碑版本的终结. Spring2.5是对Spring2.0的增强,增加了一些新的特性: 全面支持java6和javaEE5(JDBC 4.0, JTA 1. ...

  10. android dagger2 懒加载,Android Dagger依赖注入框架浅析

    今天接触了Dagger这套android的依赖注入框架(DI框架),感觉跟Spring 的IOC差不多吧.这个框架它的好处是它没有采用反射技术(Spring是用反射的),而是用预编译技术,因为基于反射 ...

最新文章

  1. python3数据库编程_python3+PyQt5 数据库编程--增删改实例
  2. HTML5与CSS3基础教程第八版学习笔记7~10章
  3. 观察内核linux行为,观察linux行为 实验报告.doc
  4. python语言程序设计考试内容_MOOC_Python语言程序设计(嵩天)考试_第一周
  5. Git 代码管理(代码提交和代码回退)
  6. 与Win8之磁盘活动时间100%斗争心得
  7. iOS开发 - ARC的开启与关闭
  8. python必背100源代码-python 100例 (持续更新)
  9. 相关搜索 --- 搜索中的推荐
  10. NI LabVIEW开发环境(2.生成installer安装程序exe)
  11. SQLite 命令行客户端 sqlite3 使用指南
  12. Karas中LSTM模型的各个参数的含义
  13. 查看mysql缓存命中_【转】MySQL如何检查缓存命中
  14. mysql root password_MYSQL安装时解决要输入current root password的方案
  15. 【MFC】打砖块小游戏(上)(5)
  16. 开发部工程师工作指导及规范
  17. Linux下的视频采集(V4L2)
  18. 【人工智能】如何看待人工智能技术的变革与未来? 分10个方面来详细展开谈谈,不少于5000字。
  19. java tm 8下载_Java(TM) 8安全下载
  20. 建议收藏:数据标准的概念,分类,价值及6大实施步骤解析

热门文章

  1. 【滤波器】基于matlab GUI FIR+IIR数字滤波器设计【含Matlab源码 324期】
  2. int是终结符还是非终结符_什么是自动化的终结?
  3. Hadoop安装部署的三种模式总结
  4. 二维粒子群算法的matlab源程序,二维粒子群算法的matlab源程序
  5. 【C++】set和multiset区别
  6. php 重定义数组k,PHP基础篇之数组
  7. 在一个成熟行业里怎么生存下去?
  8. PBOC规范研究之四、文件结构及访问(转)
  9. 靠谱么?人工智能为《我是歌手4》“占卜”
  10. SQL Server 中的例程分析