Spring4新特性——泛型限定式依赖注入
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新特性——泛型限定式依赖注入相关推荐
- Spring4新特性——Web开发的增强
2019独角兽企业重金招聘Python工程师标准>>> Spring4新特性--泛型限定式依赖注入 Spring4新特性--核心容器的其他改进 Spring4新特性--Web开发的增 ...
- Spring4新特性——核心容器的其他改进
2019独角兽企业重金招聘Python工程师标准>>> Spring4新特性--泛型限定式依赖注入 Spring4新特性--核心容器的其他改进 Spring4新特性--Web开发的增 ...
- Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC
http://sishuok.com/forum/blogPost/list/7798.html 在之前的<跟我学SpringMVC>中的<第七章 注解式控制器的数据验证.类型转换及 ...
- c#3.0加入的一些新特性——泛型集合
c#3.0加入的一些新特性 1.泛型集合 2.隐式类型 3.自动实现属性 3.匿名方法 4.扩展方法 5.Lambda表达式 1.泛型集合 在.NET2.0中没有泛型集合定义集合用ArrayList定 ...
- c#2.0的新特性--泛型
c#2.0中引入了许多新的语言特性:比较重要的有4个,泛型(Generics).匿名方法(Annorymous Methods).迭代器(Iterators).和局部类(Partial Types). ...
- C#2.0新特性-泛型
C#2.0中引入了许多新的语言特性:比较重要的有4个,泛型(Generics).匿名方法(Annorymous Methods).迭代器(Iterators).和局部类(Partial Types). ...
- Spring4.1新特性——Spring MVC增强
2019独角兽企业重金招聘Python工程师标准>>> 1.GroovyWebApplicationContext 在Spring 4.1之前没有提供Web集成的Applicati ...
- Spring IoC是如何进行依赖注入的
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 依赖注入(DI) DI(Dependency Injection) ...
- Spring 2.5新特性及架构图
Spring2.5是Spring2.1各个里程碑版本的终结. Spring2.5是对Spring2.0的增强,增加了一些新的特性: 全面支持java6和javaEE5(JDBC 4.0, JTA 1. ...
- android dagger2 懒加载,Android Dagger依赖注入框架浅析
今天接触了Dagger这套android的依赖注入框架(DI框架),感觉跟Spring 的IOC差不多吧.这个框架它的好处是它没有采用反射技术(Spring是用反射的),而是用预编译技术,因为基于反射 ...
最新文章
- python3数据库编程_python3+PyQt5 数据库编程--增删改实例
- HTML5与CSS3基础教程第八版学习笔记7~10章
- 观察内核linux行为,观察linux行为 实验报告.doc
- python语言程序设计考试内容_MOOC_Python语言程序设计(嵩天)考试_第一周
- Git 代码管理(代码提交和代码回退)
- 与Win8之磁盘活动时间100%斗争心得
- iOS开发 - ARC的开启与关闭
- python必背100源代码-python 100例 (持续更新)
- 相关搜索 --- 搜索中的推荐
- NI LabVIEW开发环境(2.生成installer安装程序exe)
- SQLite 命令行客户端 sqlite3 使用指南
- Karas中LSTM模型的各个参数的含义
- 查看mysql缓存命中_【转】MySQL如何检查缓存命中
- mysql root password_MYSQL安装时解决要输入current root password的方案
- 【MFC】打砖块小游戏(上)(5)
- 开发部工程师工作指导及规范
- Linux下的视频采集(V4L2)
- 【人工智能】如何看待人工智能技术的变革与未来? 分10个方面来详细展开谈谈,不少于5000字。
- java tm 8下载_Java(TM) 8安全下载
- 建议收藏:数据标准的概念,分类,价值及6大实施步骤解析
热门文章
- 【滤波器】基于matlab GUI FIR+IIR数字滤波器设计【含Matlab源码 324期】
- int是终结符还是非终结符_什么是自动化的终结?
- Hadoop安装部署的三种模式总结
- 二维粒子群算法的matlab源程序,二维粒子群算法的matlab源程序
- 【C++】set和multiset区别
- php 重定义数组k,PHP基础篇之数组
- 在一个成熟行业里怎么生存下去?
- PBOC规范研究之四、文件结构及访问(转)
- 靠谱么?人工智能为《我是歌手4》“占卜”
- SQL Server 中的例程分析