Spring内核研究-管理bean之间的关系二(自动依赖检查)
?自动依赖检查可以保证所有java bean中的属性(set方法)都在Spring中正确的配置。如果在一个java bean中定义了一个name属性,并且也setName方法。那么在开启自动依赖检查功能后,就必须在Spring中定义这个属性,否则Spring将抛出异常。
请看下面的例子:Dao.java包含一个setName方法。package research.spring.beanfactory.ch3;public class Dao {private String name;public void setName(String name) {this.name = name;}}??context.xml:?<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd"><beans><bean name="dao" name="code"><?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd"><beans><bean name="dao" dependency-check="all" > </bean><bean id="database" width="550" src="/img/2012/07/17/1609466348.jpg" alt="Spring内核研究-治理bean之间的关系二(自动依赖检查)">Spring定义了4种依赖检查的策略:?none(默认)??? 不进行依赖检查。simple??? 只对简单属性和集合中的简单属性进行检查。不对依赖的对象检查。objects??? 只对为对象类型的属性进行检查。all??? 对所有类型进行检查。???? 如果把上面例子里的context.xml改成这样:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd"><beans><bean name="dao" dependency-check="objects" > </bean><bean id="database" name="code">package research.spring.beanfactory.ch3;public class Dao {private Database database;private String name="chenjie";//dependency-check仍然会检查这个属性是否配置注入public void setName(String name) {this.name = name;}public void setDatabase(Database database) {this.database = database;}}?
即使Dao设置里name得默认值,但是只要有setName方法,dependency-check仍然会判断是否在配置文件中设置了setName对应的注入。