spring IoC (七)Bean的依赖检查

  在使用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

spring IoC (七)Bean的依赖检查的相关文章

Spring IOC体验之—如何依赖注入

Spring依赖注入: 属性注入 要求: 每个Bean都需要提供一个默认的构造函数. 对需要注入的属性提供一个 getter和setter方法.(spring只会检查Bean中是否有对应的Setter方法,至于Bean中是否有对应的属性变量不做要求) 构造函数注入 保证一些必要的属性在Bean实例化初就得到设置,以便实例化之后就可以直接使用. 要求:Bean必须提供带参数的构造函数 Spring注入参数类型 字面值:直接通过<value>指定注入 引用其他的bean 集合类型属性-List L

【SSH系列】深入浅出spring IOC中三种依赖注入方式

spring的核心思想是IOC和AOP,IOC-控制反转,是一个重要的面向对象编程的法则来消减计算机程序的耦合问题,控制反转一般分为两种类型,依赖注入和依赖查找,依赖什么?为什么需要依赖?注入什么?控制什么?依赖注入和控制反转是一样的概念吗?接触新的知识,小编的脑袋中全是大大的问号,不过没有关系,今天这篇博文,小编主要来简单的介绍一下在spring IOC中依赖注入的方法. 依赖注入和控制反转,目的是为了使类与类之间解耦合,提高系统的可扩展性和可维护性.我们可以从以下几个方面理解: a.参与者都

Java Spring学习笔记----Bean的依赖注入(1)

Spring常用的两种依赖注入方式:一种是设值注入方式,利用Bean的setter方法设置Bean的属性值:另一种是构造注入,通过给Bean的构造方法传递参数来实现Bean的属性赋值: 1.设值注入方式 直接上代码例子,示例的树结构图如下 Shape.java接口内容 package chapter3; public interface Shape { public double area();//求形状的面积 } Circle.java内容: package chapter3; public

Spring IOC 创建bean实例的方式

据我所知,创建bean实例的方式有4种方式~ 下面我会一一写出来这4种方式~ 第一种:xml文件中有bean的配置,而且这个bean所对应的java类中存在一个无参构造器,那么这个时候spring容器就可以使用反射调用无参构造器来创建实例了~ 代码如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/be

Spring IoC源码解析——Bean的创建和初始化

Spring介绍 Spring(http://spring.io/)是一个轻量级的Java 开发框架,同时也是轻量级的IoC和AOP的容器框架,主要是针对JavaBean的生命周期进行管理的轻量级容器,可以单独使用,也可以和Struts框架,MyBatis框架等组合使用. IoC介绍 IoC是什么 Ioc-Inversion of Control,即"控制反转",不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控

Spring IoC Bean 实例化(二)源码分析

目录 Spring IoC 依赖注入(四)构造器或工厂注入 1. doCreateBean 2. createBeanInstance 2. 实例化策略 - InstantiationStrategy 3. instantiateBean 4. autowireConstructor 4.1 整体说明 4.2 缓存匹配 4.3 无参构造器匹配 4.4 有参构造器匹配 5. ConstructorResolver 参数解析 5.1 resolveConstructorArguments 5.2 c

Spring IoC Container and Spring Bean Example Tutorial

Spring Framework is built on the Inversion of Control (IOC) principle. Dependency injection is the technique to implement IoC in applications. This article is aimed to explain core concepts of Spring IoC container and Spring Bean with example program

spring IOC源码分析(1)

1.何谓Spring IOC 何谓Spring IOC?书上谓之“依赖注入”,那何谓“依赖注入”? 作为一个Java程序猿,应该遇到过这样的问题,当你在代码中需要使用某个类提供的功能时,你首先需要new一个对象,给它传递必要的参数,然后才能使用它提供的功能,最后释放对象占用的内存,当然了这个在Java不需要你自己去干了.这也就是说你需要自己去管理变量的整个生命周期,这在大型项目中是很糟糕的.现在好了,有了Spring IOC,这些事情都不需要你去做,你只需要告诉Spring你需要的变量实例,配置

菜鸟学习spring IOC有感

 一.spring IOC思想引入 事实上对于刚開始学习的人来说,在学习IOC的时候确实有点困难,主要是掌握其思想方面存在一丢丢的障碍,可是假设可以跨过这个障碍,则可以高速掌握当中的思想了.单从字面上来讲,事实上IOC(反向控制)指的就是控制方向发生了变化.我们常常会遇到这句话:"实现必须依赖抽象,而不是抽象依赖实现."尽管这句话表达了反向控制的概念,可是对于刚開始学习的人来讲,确实不是非常好理解.接下来我们就通过一些实例去理解这些内容的含义. 首先我们创建两个类,一个用于连接数据