天天看点

《Spring攻略(第2版)》——1.9 用依赖检查属性

本节书摘来自异步社区《spring攻略(第2版)》一书中的第1章,第1.9节,作者: 【美】gary mak , josh long , daniel rubio著,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.9.1 问题

在大规模的应用中,ioc容器中可能声明了几百个或者几千个bean,这些bean之间的依赖往往非常复杂。设值方法注入的不足之一是无法确定一个属性将会被注入。检查所有必要的属性是否已经设置是非常困难的。

1.9.2 解决方案

spring的依赖检查功能能够帮助你检查在一个bean上的所有特定类型属性是否都已经设置。你只要在的dependency-check属性中指定依赖检查模式就可以了。注意,依赖检查功能只能检查属性是否已经设置,而无法检查它们的值是否非空。表1-1列出了spring支持的所有依赖检查模式。

《Spring攻略(第2版)》——1.9 用依赖检查属性

*默认模式为none,但是可以设置根元素的default-dependency-check属性来改变。如果bean指定了自己的模式,默认模式将被覆盖。你必须小心设置这个属性,因为它将改变ioc容器中的所有bean的默认依赖检查模式。

1.9.3 工作原理

检查简单类型属性

假定序列生成器的suffix属性没有设置。那么生成器将生成后缀为空字符串的序列号。这种问题通常很难调试,特别是在复杂的bean中。幸运的是,spring能够检查所有特定类型的属性是否已经设置。为了要求spring检查简单类型(也就是原始类型和集合类型)的属性,将的dependency-check属性设置为simple。

如果任何这些类型的属性没有设置,就会抛出unsatisfieddependencyexception异常,指出未设置的属性。

检查对象类型的属性

如果前缀生成器未被设置,请求它的时候将会抛出讨厌的nullpointerexception异常。为了使依赖检查能检查对象类型(也就是简单类型之外的)的bean属性,将dependency-check属性改为objects。

当你运行应用程序时,spring将通知你prefixgenerator属性未设置。

检查所有类型属性

如果你想检查任何类型的所有bean属性,可以将dependency-check属性改为all。

依赖检查和构造程序注入

spring的依赖检查功能只检查属性是否通过设值方法注入。所以,即使你已经通过构造程序注入了前缀生成器,仍然会抛出unsatisfieddependencyexception异常。