在使用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 }
原文地址:https://www.cnblogs.com/toUpdating/p/9728733.html
时间: 2024-10-14 08:42:13