Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC
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> { @Autowired public void setUserRepository(UserRepository userRepository) { setRepository(userRepository); } } @Service public class OrganizationService extends BaseService<Organization> { @Autowired public void setOrganizationRepository(OrganizationRepository organizationRepository) { setRepository(organizationRepository); } }
可以看到,以前必须再写一个setter方法,然后指定注入的具体类型,然后进行注入;
1.3.2、泛型Service的写法
public abstract class BaseService<M extends Serializable> { @Autowired protected 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指定使用哪一个。
相关推荐
C 设计新思维——泛型编程与设计范式之应用 PDF,候捷译序。㆒般人对C templates 的粗略印象,大约停留在「容器(containers)」的制作上。稍有研究由会发现,templates衍生出来的C Generic Programming(泛型编程)技术...
在Spring IOC容器中,我们可以通过泛型依赖注入来指定我们需要注入的对象类型,而无需显式地指定具体类的全限定名。这种方式提高了代码的可读性和可维护性。 1. **泛型接口与实现**:首先,我们可以定义一个泛型...
在Spring 4版本中,泛型依赖注入是一项重要的特性,它极大地提高了代码的灵活性和可维护性。本笔记将深入探讨SSH中的Spring框架如何实现泛型依赖注入。 首先,我们来理解泛型的基本概念。泛型是Java SE 5引入的一种...
在Spring 4.0中,一个重要的改进是引入了对泛型依赖注入的支持,这使得开发者可以更加精确地控制依赖关系,从而提高了代码的可读性和类型安全性。在描述的示例中,我们看到`BaseDao`是一个泛型抽象类,它有一个泛...
net基础——泛型PPT教案学习.pptx
泛型是Java编程语言中的一个重要特性,它在2004年随着JDK 1.5的发布而引入。这个特性极大地增强了Java类、接口和集合的安全性和效率,避免了类型转换的繁琐与潜在错误。在《夯实JAVA基本之一——泛型详解(1)》的博客...
总的来说,《夯实JAVA基本之一——泛型详解(2)》这篇博客深入剖析了Java泛型的高级特性,帮助开发者更好地理解如何在实际项目中运用泛型,提高代码质量和可维护性。通过学习这些知识点,开发者可以编写出更加高效且...
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是...
在C#编程中,泛型列表`List<T>`是一个非常重要的数据结构,它为我们提供了动态数组的功能,并且具有类型安全的特性。这篇文章将深入探讨`List<T>`的使用,包括其基本操作、性能特点以及一些高级用法。 一、基础概念...
在Spring4框架中,开发者们迎来了一项重要的更新——更优的Java泛型操作API。这一新特性极大地提升了代码的可读性和可维护性,同时也为开发者提供了更强大的工具来处理泛型类型。本文将深入探讨Spring4在这个领域所...
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是...
C# 2.0 是微软.NET框架中C#语言的一个重要版本,它引入了许多新特性,其中最具革命性的是泛型。泛型为C#程序员提供了编写高效、类型安全且可重用代码的能力,极大地提高了代码的灵活性和性能。下面我们将深入探讨C# ...
最近有个需求就是一个抽象仓储层接口方法需要SqlServer以及Oracle两种实现方式,为了灵活我在依赖注入的时候把这两种实现都给注入进了依赖注入容器中,但是在服务调用的时候总是获取到最后注入的那个方法的实现,这...
通过这个实战项目,你可以深入理解Java反射、泛型和注解的用法,并且了解到如何利用它们构建一个基本的依赖注入系统,这将有助于你更好地理解和使用Spring框架。同时,这样的实践也有助于提升你的编程技能,使你能够...
Java8新特性之泛型的目标类型推断_动力节点Java学院,动力节点口口相传的Java黄埔军校
Spring 中优雅的获取泛型信息的方法 在 Spring 框架中,获取泛型信息是非常重要的,在实际开发中经常会遇到这种情况。今天,我们来讨论如何在 Spring 中优雅地获取泛型信息。 第一种方法:通过反射获取泛型信息 ...
- **利用 Java 5 特性**:为了更好地利用 Java 5 的新特性,如泛型、变长参数列表等,Spring 3.0 对其核心代码库进行了全面的修订和优化。 - **一致性的使用**:在 Spring 中,现在可以一致性地使用泛型集合和映射...
4. **擦除**:Java的泛型在编译后会被擦除,实际运行的字节码不包含泛型信息,但编译时的类型检查仍然有效。 **foreach循环(增强for循环)** 增强for循环,也称为foreach循环,是JDK 1.5中引入的简化迭代集合和数...