在上面的一个例子中,我们看到,通过设立dependency-check="object"属性来在没有找到匹配的情况下抛出错误。这就是类型检查。
下面我们来看看Spring中的Bean的4中依赖检查模式:simple,object,all,none.
1 simple:对基本类型,字符型和集合进行依赖检查。
Java代码
1. <?xml version="1.0" encoding="UTF-8"?>
2. <!DOCTYPE beans Public "-//SPRING//DTD BEAN//EN"
3. "http://www.springframework.org/dtd/spring-beans.dtd">
4. <beans>
5. <bean id ="HelloWorld" class="com.jnotnull.HelloWorld"
6. autowire="autodectect" dependency-check="simple">
7. <bean>
8. <bean id="date" class="java.util.Date">
9. </beans>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans Public "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id ="HelloWorld" class="com.jnotnull.HelloWorld"
autowire="autodectect" dependency-check="simple">
<bean>
<bean id="date" class="java.util.Date">
</beans>
2 object:对依赖的对象进行检查
Java代码
1. <?xml version="1.0" encoding="UTF-8"?>
2. <!DOCTYPE beans Public "-//SPRING//DTD BEAN//EN"
3. "http://www.springframework.org/dtd/spring-beans.dtd">
4. <beans>
5. <bean id ="HelloWorld" class="com.jnotnull.HelloWorld"
6. autowire="autodectect" dependency-check="object">
7. <bean>
8. <bean id="date" class="java.util.Date">
9. </beans>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans Public "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id ="HelloWorld" class="com.jnotnull.HelloWorld"
autowire="autodectect" dependency-check="object">
<bean>
<bean id="date" class="java.util.Date">
</beans>
3 all:对全部属性进行检查
Java代码
1. <?xml version="1.0" encoding="UTF-8"?>
2. <!DOCTYPE beans Public "-//SPRING//DTD BEAN//EN"
3. "http://www.springframework.org/dtd/spring-beans.dtd">
4. <beans>
5. <bean id ="HelloWorld" class="com.jnotnull.HelloWorld"
6. autowire="autodectect" dependency-check="all">
7. <bean>
8. <bean id="date" class="java.util.Date">
9. </beans>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans Public "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id ="HelloWorld" class="com.jnotnull.HelloWorld"
autowire="autodectect" dependency-check="all">
<bean>
<bean id="date" class="java.util.Date">
</beans>
4 none:不进行依赖检查:
Java代码
1. <?xml version="1.0" encoding="UTF-8"?>
2. <!DOCTYPE beans Public "-//SPRING//DTD BEAN//EN"
3. "http://www.springframework.org/dtd/spring-beans.dtd">
4. <beans>
5. <bean id ="HelloWorld" class="com.jnotnull.HelloWorld"
6. autowire="autodectect" dependency-check="none">
7. <bean>
8. <bean id="date" class="java.util.Date">
9. </beans>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans Public "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id ="HelloWorld" class="com.jnotnull.HelloWorld"
autowire="autodectect" dependency-check="none">
<bean>
<bean id="date" class="java.util.Date">
</beans>
由此我们可以看出,依赖检查一般和自动装载进行配套使用。如果没有自动装载,也就没有依赖检查的必要了。
分享到:
相关推荐
在`doCreateBean()`方法中,Spring会创建Bean的实例,`createBeanInstance(beanName, mbd, args)`执行Bean实例的创建,而`populateBean(beanName, mbd, instanceWrapper)`则负责填充Bean的属性,将依赖注入到Bean中...
- **dependency-check属性**:用于依赖检查。可以选择四种模式: - `none`:不进行检查。 - `simple`:检查基本类型和集合。 - `objects`:检查其他Bean(合作者)。 - `all`:检查所有类型。 - **lazy-init...
4. **静态工厂方法或Singleton作用域**:如果使用静态工厂方法创建Bean,且未正确配置单例模式,那么每次请求都会创建新的Bean实例。对于Singleton作用域的Bean,Spring保证在整个容器生命周期内只有一个实例,如果...
- **`objects`**:对其他Bean类型的属性进行依赖检查。 - **`all`**:对所有类型的属性进行依赖检查。 - **延迟加载**: - **`lazy-init`属性**:控制Bean是否在初始化阶段延迟加载。默认情况下,单例Bean会在...
### Spring 依赖检查详解 #### 一、Spring依赖检查的重要性 在Spring框架中,依赖检查是一种重要的机制,用于确保Bean的依赖...通过对不同依赖检查模式的理解和合理应用,可以有效地提高代码的质量和程序的稳定性。
依赖注入(Dependency Injection,简称DI)是一种设计模式,它允许组件之间通过外部源来管理其依赖关系,而不是由组件自己来创建或查找依赖。Spring框架提供了两种主要的DI方式:构造器注入和setter注入。 1. **...
在Spring框架中,依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)是两大核心特性,同时自动注入Bean也是Spring管理对象的一种常见方式。让我们深入探讨这些概念。 首先,...
2. AOP:Spring的AOP框架用于在运行时动态地修改程序的行为,比如在依赖注入时,AOP代理可以在目标对象的方法调用前后插入相应的行为,如检查依赖是否已注入,或者在注入过程中执行一些额外的操作。 此外,Spring还...
然而,实际的Spring框架提供了更高级的功能,如AOP(面向切面编程)、代理模式、基于XML或Java配置的bean定义、条件注解等,使得依赖注入更加灵活和强大。 总的来说,理解和掌握反射与注解对于深入学习Spring框架至...
在这个话题中,我们将深入探讨Spring框架如何利用DOM4J解析XML配置文件,依赖注入(DI)的概念,以及IoC的实现方式,同时也会讲解反射在Spring中的应用。 首先,DOM4J是一个强大的XML处理库,它为Spring框架提供了...
3. **rawSingletons**:在bean完全初始化后,Spring将其放入这个缓存,表示bean已经完成初始化,可以被其他bean依赖。 对于`@Service`等注解标记的bean,默认是单例模式,Spring通过以下步骤解决循环依赖: 1. **...
在Spring 4中,注解是配置Bean的主要方式,它提供了更简洁、更直观的代码结构,替代了传统的XML配置。以下是一些关键的Bean注解: 1. `@Component`:这是最基础的注解,用于标记一个类为Spring Bean。你可以将它...
首先,Spring中广泛运用了两种设计模式:工厂模式和单例模式。工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在Spring框架中,工厂模式体现在Spring容器(BeanFactory或ApplicationContext)中,...
在本篇中,我们将深入探讨Spring Bean的第五种创建方式,即通过反射进行创建,特别是利用`SmartInstantiationAwareBeanPostProcessor`接口来解析构造函数的过程。这一过程对于理解和优化Spring应用的性能至关重要。 ...
在Spring框架中,AOP通过代理模式实现,可以将这些关注点与业务逻辑解耦。Spring支持两种类型的代理:JDK动态代理和CGLIB代理。前者适用于接口实现类,后者则用于无接口类。配置AOP时,我们通常会定义一个切面...
4. **单例管理**:对于单例模式的Bean,Spring会缓存其实例,确保后续请求得到的是同一个对象。 在整个初始化过程中,Spring通过一系列的回调接口和事件机制,使得开发者可以自定义Bean的生命周期行为,比如添加...
- `getDependsOn()`:获取bean依赖的其他bean的名字列表,用于控制bean的初始化顺序。 - `getAutowireMode()`:返回自动装配模式,如BY_NAME、BY_TYPE等。 - `getInitMethodName()` 和 `getDestroyMethodName()`:...
在软件设计模式中,工厂模式是一种常用的创建型模式,它提供了一种创建对象的最佳方式。在Spring框架中,我们可以利用其强大的IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面...
**Spring Tool Suite 4 (STS4) 是一个强大的集成开发环境(IDE),专门为Spring框架和Spring Boot项目设计。它是基于Eclipse平台构建的,旨在提供高效、便捷的开发体验。** **1. Spring Tool Suite 4 简介** STS4是...