1. 程式人生 > >spring IoC (七)Bean的依賴檢查

spring IoC (七)Bean的依賴檢查

容器 第一次 ioc 特性 ble div name contain ted

  在使用Spring的時候,如果應用設計比較復雜,那麽在這個應用中,IoC管理的Bean的個數可能非常多,

這些Bean之間的相互依賴關系也會非常復雜。在一般情況下,Bean的依賴註入是在應用第一次向容器索取Bean

的時候發生,這個時候,不能保證註入一定能夠成功,如果需要重新檢查這些依賴關系的有效性,會是意見很

繁瑣的事情。為了解決這樣的問題,在Spring IoC容器中,設計了一個依賴檢查特性,需要在Bean定義中設置

dependency-check屬性來指定依賴檢查模式即可,可以設置為none、simple、object、all四種模式,

默認是none。

populateBean中checkDependencies

 1     protected void checkDependencies(
 2             String beanName, AbstractBeanDefinition mbd, PropertyDescriptor[] pds, PropertyValues pvs)
 3             throws UnsatisfiedDependencyException {
 4 
 5         int dependencyCheck = mbd.getDependencyCheck();
 6         for (PropertyDescriptor pd : pds) {
7 if (pd.getWriteMethod() != null && !pvs.contains(pd.getName())) { 8 boolean isSimple = BeanUtils.isSimpleProperty(pd.getPropertyType()); 9 boolean unsatisfied = (dependencyCheck == RootBeanDefinition.DEPENDENCY_CHECK_ALL) || 10 (isSimple && dependencyCheck == RootBeanDefinition.DEPENDENCY_CHECK_SIMPLE) || 11
(!isSimple && dependencyCheck == RootBeanDefinition.DEPENDENCY_CHECK_OBJECTS); 12 if (unsatisfied) { 13 throw new UnsatisfiedDependencyException(mbd.getResourceDescription(), beanName, pd.getName(), 14 "Set this property value or disable dependency checking for this bean."); 15 } 16 } 17 } 18 }

spring IoC (七)Bean的依賴檢查