Spring提供了一种依赖检查的功能,可以防止出现配置手误,或者其他出错的可能,使用以来检查可以让系统判断配置文件的依赖注入是否完全有效。
有效的依赖是:如果属性需要普通类型的值,则在Bean的定义中已经设置了合适的值;如果属性需要java对象类型的值,则要么通过自动装配提供有效依赖,要么通过ref注入合作者Bean,要么通过<bean.../>元素指定嵌套Bean。
使用以来检查可以保证Bean的属性得到了正确设置。也许有时候某个Bean的特定属性并不需要设置值,或者某些属性已有默认值,此时采用依赖检查就会出现错误,该Bean就不应该采用依赖检查。
Spring可以为每个Bean单独指定依赖检查,Spring默认不进行依赖检查,可以通过dependency-check指定不同依赖检查策略:
1、none:不进行依赖检查,默认。
2、Simple:对基本类型和集合(除了合作者Bean)进行依赖检查。
3、Objects:仅对合作者Bean进行依赖检查。
4、All:对合作者Bean、基本类型和集合全部进行依赖检查。
(1)、simple
<bean id="person" class="net.battier.pojo.Person"
dependency-check="simple">
此处没有设置Bean的一个属性,使用了simple策略的依赖检查将报错
<property name="personName" value="张三"></property>
<property name="personAge" value="18"></property>
<property name="personSex" value="false"></property>
<property name="personDesc" value="他是个男的"></property>
<!-- 引用org -->
<property name="org" ref="organization"></property>
</bean>
(2)Objects
<!-- 雇员Bean
dependency-check="simple":对Bean属性的基本数据类型以来检查
dependency-check="objects":对合作者Bean进行依赖检查
-->
<bean id="person" class="net.battier.pojo.Person"
dependency-check="objects">
<property name="id" value="1"></property>
<property name="personName" value="张三"></property>
<property name="personAge" value="18"></property>
<property name="personSex" value="false"></property>
<property name="personDesc" value="他是个男的"></property>
<!-- 引用org(如果没有配置,则依赖检查机制会警报) -->
<property name="org" ref="organization"></property>
</bean>
(3)All
<!-- 雇员Bean
dependency-check="simple":对Bean属性的基本数据类型以来检查
dependency-check="objects":对合作者Bean进行依赖检查
dependency-check="all":对合作者Bean、基本类型和集合全部进行检查
-->
<bean id="person" class="net.battier.pojo.Person"
dependency-check="all">
<property name="id" value="1"></property>
<property name="personName" value="张三"></property>
<property name="personAge" value="18"></property>
<property name="personSex" value="false"></property>
<property name="personDesc" value="他是个男的"></property>
<!-- 引用org(如果没有配置,则依赖检查机制会警报) -->
<property name="org" ref="organization"></property>
</bean>
(4)None
<!-- 雇员Bean
dependency-check="simple":对Bean属性的基本数据类型以来检查
dependency-check="objects":对合作者Bean进行依赖检查
dependency-check="all":对合作者Bean、基本类型和集合全部进行检查
dependency-check="none":不进行依赖检查(默认)。
-->
<bean id="person" class="net.battier.pojo.Person"
dependency-check="none">
<property name="id" value="1"></property>
<property name="personName" value="张三"></property>
<property name="personAge" value="18"></property>
<property name="personSex" value="false"></property>
<property name="personDesc" value="他是个男的"></property>
<!-- 引用org(如果没有配置,则会空指针异常) -->
<property name="org" ref="organization"></property>
</bean>
分享到:
相关推荐
在`doCreateBean()`方法中,Spring会创建Bean的实例,`createBeanInstance(beanName, mbd, args)`执行Bean实例的创建,而`populateBean(beanName, mbd, instanceWrapper)`则负责填充Bean的属性,将依赖注入到Bean中...
Spring框架是Java开发中不可或缺的一部分,它以其控制反转(IoC)和依赖注入(DI)的核心特性,极大地简化了应用程序的构建与管理。在本文中,我们将深入探讨Spring中的Bean配置,包括IoC和DI的概念,Bean的配置方式...
解决这个问题的关键在于深入理解Spring的Bean生命周期和配置机制,检查配置文件、注解使用、依赖关系等,确保每个Bean的定义都是唯一的,且作用域设置正确。同时,对源码进行调试也是一个有效的排查手段,可以追踪到...
- **dependency-check属性**:用于依赖检查。可以选择四种模式: - `none`:不进行检查。 - `simple`:检查基本类型和集合。 - `objects`:检查其他Bean(合作者)。 - `all`:检查所有类型。 - **lazy-init...
- **`objects`**:对其他Bean类型的属性进行依赖检查。 - **`all`**:对所有类型的属性进行依赖检查。 - **延迟加载**: - **`lazy-init`属性**:控制Bean是否在初始化阶段延迟加载。默认情况下,单例Bean会在...
在`DefaultListableBeanFactory`中,`doGetBean()`方法是获取Bean的核心实现,它会检查Bean是否存在、处理依赖注入、处理作用域等。通过跟踪源码,我们可以更深入地理解Spring的IoC(控制反转)和DI(依赖注入)机制...
2. **Bean类型的依赖检查**:如果使用`objects`模式,那么Spring将检查`Axe` Bean是否被正确注入到`Chinese` Bean中。这对于需要其他Bean作为依赖的情况非常有用。 3. **全面依赖检查**:如果使用`all`模式,那么...
在Spring框架中,依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)是两大核心特性,同时自动注入Bean也是Spring管理对象的一种常见方式。让我们深入探讨这些概念。 首先,...
本文将深入探讨Spring依赖注入的概念、工作原理以及如何在实际项目中应用。 依赖注入(Dependency Injection,简称DI)是一种设计模式,它允许组件之间通过外部源来管理其依赖关系,而不是由组件自己来创建或查找...
8. `dependency-check` 属性:设置依赖检查级别,用于验证Bean的依赖是否已完全满足。 9. `lazy-init` 属性:如果设为`true`,Bean会在需要时(即第一次请求时)才被初始化,而不是在容器启动时立即初始化。 10. `...
2. **循环依赖处理**:在缓存检查过程中,如果Bean正在被创建(即存在循环依赖),那么Spring会返回一个未完全初始化的实例,这是循环依赖处理的一种策略。 3. **Bean定义检查**:如果缓存中没有找到Bean,Spring会...
2. AOP:Spring的AOP框架用于在运行时动态地修改程序的行为,比如在依赖注入时,AOP代理可以在目标对象的方法调用前后插入相应的行为,如检查依赖是否已注入,或者在注入过程中执行一些额外的操作。 此外,Spring还...
Spring在创建Bean时会检查是否处于“当前创建Bean池”中,如果是,则会暂时保存这个半初始化的对象,稍后继续注入依赖。一旦所有的依赖注入完成,Bean将被正式注册到容器中。 3. prototype范围的循环依赖 对于非...
3. **rawSingletons**:在bean完全初始化后,Spring将其放入这个缓存,表示bean已经完成初始化,可以被其他bean依赖。 对于`@Service`等注解标记的bean,默认是单例模式,Spring通过以下步骤解决循环依赖: 1. **...
Spring框架是Java开发中最常用的轻量级框架之一,它提供了丰富的功能来简化应用程序的开发,如依赖注入(DI)、面向切面编程(AOP)、事务管理等。在Spring框架中,`xds`和`dtd`文件是重要的元数据资源,它们用于...
在Java编程中,Spring框架是应用最广泛的IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)容器。这篇博客"使用反射和注解模拟Spring的依赖注入"探讨了如何通过基本的Java特性来实现...
在Spring框架中,依赖注入(Dependency Injection,DI)是一种核心特性,它允许我们解耦组件,使得代码更易于测试和维护。`@Autowired`和`@Bean`是两个关键注解,它们在实现DI时起着重要作用。让我们深入探讨这两个...
3. **Bean的实例化过程**:当尝试获取BeanA时,Spring会先检查`singletonObjects`。如果没有找到,但发现`singletonFactories`中有BeanA的信息,Spring会使用回调工厂来获取BeanA的实例,从而完成依赖注入。 4. **...
对于setter注入,Spring会检查BeanDefinition中属性值的`ref`属性,如果存在,表示该属性是一个引用,需要查找对应的bean实例并注入。这个过程称为`autowiring`,自动匹配类型匹配的bean。 构造器注入则在创建bean...