博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Spring攻略(第2版)》——1.9 用依赖检查属性
阅读量:6862 次
发布时间:2019-06-26

本文共 1823 字,大约阅读时间需要 6 分钟。

本节书摘来自异步社区《Spring攻略(第2版)》一书中的第1章,第1.9节,作者: 【美】Gary Mak , Josh Long , Daniel Rubio著,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.9 用依赖检查属性

1.9.1 问题

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

1.9.2 解决方案

Spring的依赖检查功能能够帮助你检查在一个Bean上的所有特定类型属性是否都已经设置。你只要在的dependency-check属性中指定依赖检查模式就可以了。注意,依赖检查功能只能检查属性是否已经设置,而无法检查它们的值是否非空。表1-1列出了Spring支持的所有依赖检查模式。
screenshot
*默认模式为none,但是可以设置根元素的default-dependency-check属性来改变。如果Bean指定了自己的模式,默认模式将被覆盖。你必须小心设置这个属性,因为它将改变IoC容器中的所有Bean的默认依赖检查模式。

1.9.3 工作原理

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

  
  

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

Exception in thread "main"org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating  bean with name 'sequenceGenerator' defined in class path resource [beans.xml]:Unsatisfied dependency expressed through bean property 'suffix': Set this propertyvalue or disable dependency checking for this bean.

检查对象类型的属性

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

  
  

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

Exception in thread "main"org.springframework.beans.factory.UnsatisfiedDependencyException: Error creatingbean with name 'sequenceGenerator' defined in class path resource [beans.xml]:Unsatisfied dependency expressed through bean property 'prefixGenerator': Set thisproperty value or disable dependency checking for this bean.

检查所有类型属性

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

  

依赖检查和构造程序注入

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

  
  
  

转载地址:http://ayeyl.baihongyu.com/

你可能感兴趣的文章
cocos studio和cocos creator关系
查看>>
满江红
查看>>
TerryLee技术专栏>WCF后传>正文 WCF后传系列(3):深入WCF寻址Part 3—消息过滤引擎...
查看>>
在Android源码树中添加userspace I2C读写工具(i2c-util)
查看>>
关于C和C++的一点观点
查看>>
为何国内管理软件开发者很艰难?
查看>>
创建并运行HelloWorld Java项目和类
查看>>
Mysql组复制故障恢复测试
查看>>
为UC做准备:部署Exchange 2010及SP1
查看>>
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
查看>>
windows下编译及使用libevent
查看>>
Nginx HttpMemcModule和直接访问memcached效率对比测试
查看>>
Android微信智能心跳方案 Android微信智能心跳方案
查看>>
搭建git for windows服务器(100%可以成功)【转】
查看>>
ArcEngine数据删除几种方法和性能比较
查看>>
配置Tomcat6的管理用户
查看>>
拆分字符串的表值函数
查看>>
禁止页面后退JS(兼容各浏览器)
查看>>
常用的Git Tips
查看>>
Linux 内核里的“智能指针”【转】
查看>>