领先一步
VMware 提供培训和认证,以加速您的进步。
了解更多Spring Framework 4.3.RC1 即将发布,它带来了一些不错的核心容器改进,我们将在本文中探讨...
考虑以下服务类
@Service
public class FooService {
private final FooRepository repository;
@Autowired
public FooService(FooRepository repository) {
this.repository = repository
}
}
这是一个非常常见的用例,但是如果您忘记在构造函数上使用 @Autowired
注解,容器将会抛出一个异常,寻找一个默认的构造函数,除非您在 bean 定义设置中明确指定 autowire 模式 'constructor'(例如,在 XML <bean>
中)。
因此,从 4.3 开始,您不再需要在这种单构造函数场景中指定显式的注入注解。这对于那些没有任何容器注解的类来说尤其优雅,例如当以编程方式注册时
public class FooService {
private final FooRepository repository;
public FooService(FooRepository repository) {
this.repository = repository
}
}
同样,您可能已经注意到 @Configuration
类历史上不支持构造函数注入。从 4.3 开始,它们现在支持了,并且它们显然也允许在单构造函数场景中省略 @Autowired
...
@Configuration
public class FooConfiguration {
private final FooRepository repository;
public FooConfiguration(FooRepository repository) {
this.repository = repository
}
@Bean
public FooService fooService() {
return new FooService(this.repository);
}
}
Spring Framework 4.3 还引入了 ObjectProvider
,它是现有 ObjectFactory
接口的扩展,它具有方便的签名,例如 getIfAvailable
和 getIfUnique
,仅在 bean 实际存在时(可选支持)或可以确定单个候选对象时(特别是:在多个匹配的 bean 的情况下,主要的候选对象)才检索 bean。
@Service
public class FooService {
private final FooRepository repository;
public FooService(ObjectProvider<FooRepository> repositoryProvider) {
this.repository = repositoryProvider.getIfUnique();
}
}
您可以使用这样的 ObjectProvider
句柄在初始化期间进行自定义解析,如上所示,或者将句柄存储在字段中以进行稍后的按需解析(就像通常使用 ObjectFactory
一样)。
缓存抽象主要用于缓存 CPU 和/或 IO 消耗的值。在某些用例中,尤其是在启动时,多个线程(即客户端)可能会并行请求给定的键。同步缓存支持是一个长期要求的特性,现在已经实现了。假设以下情况
@Service
public class FooService {
@Cacheable(cacheNames = "foos", sync = true)
public Foo getFoo(String id) { ... }
}
请注意 sync = true
属性,它告诉框架在计算值时阻止任何并发线程。这将确保在并发访问的情况下,此密集操作仅被调用一次。
顺便说一句,Spring Framework 4.3 现在支持 Caffeine,它是 Guava 缓存的 Java 8 重写版本,旨在取代 Spring Framework 5 中的 Spring 的 Guava 支持。
还有很多其他的核心改进,其中一些是长期渴望的
Collection
/Map
beanjavax.annotation.Resource.lookup()
@AliasFor
默认为声明属性的名称@PropertySource
声明@Scheduled
上)Spring Framework 4.3.0.RC1
预计于 3 月底发布,GA 计划于 5 月底发布。如果您对这些功能感兴趣,请尽早使用快照试用:最简单的方法是在 https://start.spring.io 上使用 Spring Boot 1.4.0 (SNAPSHOT)
生成一个项目,其中包含当前的 Spring Framework 4.3 快照。