`

Spring内核研究-管理bean之间的关系二(自动依赖检查)

阅读更多

 自动依赖检查可以保证所有java bean中的属性(set方法)都在Spring中正确的配置。如果在一个java bean中定义了一个name属性,并且也setName方法。那么在开启自动依赖检查功能后,就必须在Spring中定义这个属性,否则Spring将抛出异常。

请看下面的例子:
Dao.java
包含一个setName方法。
package research.spring.beanfactory.ch3;
public class Dao {
private String name;
public void setName(String name) {
this.name = name;
}
}
 
 context.xml:
 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean name="dao" class="research.spring.beanfactory.ch3.Dao">  </bean>
<bean id="database" class="research.spring.beanfactory.ch3.Database">
</bean>
</beans>
 
 我们在context.xml没有定义Dao的name属性。上面的配置,Spring可以正常的实例化Dao对象。
下面我们修改context.xml:
我们通过dependency-check=all,在Dao上增加了自动依赖检查的功能。
 
 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean name="dao" class="research.spring.beanfactory.ch3.Dao" dependency-check="all" >    </bean>
<bean id="database" class="research.spring.beanfactory.ch3.Database">
</bean>
</beans>
 当配置依赖检查时,Spring实例化Dao时会抛出一个异常:
Spring定义了4种依赖检查的策略:
 
  • none(默认)
    不进行依赖检查。
  • simple
    只对简单属性和集合中的简单属性进行检查。不对依赖的对象检查。
  • objects
    只对为对象类型的属性进行检查。
  • all
    对所有类型进行检查。
 
    如果把上面例子里的context.xml改成这样:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean name="dao" class="research.spring.beanfactory.ch3.Dao" dependency-check="objects" >    </bean>
<bean id="database" class="research.spring.beanfactory.ch3.Database">
</bean>
</beans>
 
Spring将不会抛出异常,因为objects只对依赖的对象进行检查。
 
dependency-check在Spring中又以下的限制:
 
  1.  不能对构造函数中的参数进行检查。
  2.  即使属性中有默认值,只要包含了set方法,那么dependency-check仍然需要检查Spring中是否配置了这个属性。
package research.spring.beanfactory.ch3;
public class Dao {
private Database database;
private String name="chenjie";
//dependency-check仍然会检查这个属性是否配置注入

public void setName(String name) {
this.name = name;
}
public void setDatabase(Database database) {
this.database = database;
}
}

 

即使Dao设置里name得默认值,但是只要有setName方法,dependency-check仍然会判断是否在配置文件中设置了setName对应的注入。
分享到:
评论

相关推荐

    官方原版源码spring-framework-5.2.3.RELEASE.zip

    这个官方原版源码包为我们提供了一窥Spring内核的机会,让我们能够深入理解其工作原理,提升我们的开发技能。 首先,我们要了解Spring Framework的基本架构。Spring的核心在于IoC(Inversion of Control)和AOP...

    spring内核详解

    总结来说,Spring内核的精髓在于其依赖注入和面向切面编程的理念,以及强大的容器管理和数据访问集成能力。通过对这些核心概念的理解,开发者可以更好地利用Spring构建出灵活、可扩展且易于维护的系统。

    spring-boot-3.3.0-M2.tar.gz

    1. **自动配置**:SpringBoot 的核心特性之一,它会根据项目依赖自动配置相关的 Spring Bean,比如添加了 JPA 依赖,就会自动配置数据源和实体管理等。 2. **内嵌式 Web 服务器**:SpringBoot 内置了 Tomcat 或 ...

    Spring 5.2.9的IOC核心jar包

    通过配置文件或者注解,开发者可以定义对象及其依赖关系,Spring容器会自动管理这些对象的生命周期,包括实例化、初始化、装配和销毁。 **Bean** 在Spring中,业务逻辑的组件被称为Bean。Bean是Spring容器管理的...

    spring-boot-1.4.0.RELEASE.zip

    1.4.0.RELEASE版本中,框架会根据引入的依赖自动配置相应的Bean,如Tomcat、JPA、Spring Data等,大大减少了开发者的手动配置工作。 3. **Actuator增强** Actuator是Spring Boot用于监控和管理应用的模块,在1.4.0...

    mirrors-Spring-Framework-master

    标题中的"mirrors-Spring-Framework-master"可能指的是一个包含Spring Framework源码镜像的仓库,这为我们提供了深入学习和理解Spring内核的机会。描述中的“小工具,灵活性强”强调了Spring框架的一个核心特点——...

    spring-framework.zip

    在源码中,我们可以看到Spring如何通过@Autowired、@Resource等注解来实现自动装配,以及BeanFactory和ApplicationContext是如何管理Bean的生命周期和依赖关系的。 2. **面向切面编程(Aspect-Oriented Programming...

    Spring全家桶知识笔记.pdf

    关于Spring的IOc原理,它通过配置文件描述bean和它们之间的依赖关系,并利用Java的反射功能实例化这些bean,建立它们之间的依赖关系。Spring的IoC容器在这些基础上提供了更多高级服务,比如bean的实例缓存、生命周期...

    springbook-master.rar

    "springbook-master.rar"这个压缩包文件,显然包含了与Spring框架相关的源码分析资料,为开发者提供了深入了解Spring内核的机会。下面我们将详细探讨Spring框架的核心概念、主要模块以及源码学习的重要性。 1. **...

    Spring源码分析

    1. **依赖注入(Dependency Injection, DI)**:Spring的核心特性之一,它允许我们将对象之间的依赖关系从代码中解耦出来,通过配置文件或注解来管理。DI使得组件间的耦合度降低,提高了代码的可测试性和可维护性。在...

    尚硅谷spring学习源码

    尚硅谷的Spring学习源码提供了一种深入理解Spring内核及其工作原理的方式,通过亲手敲码并辅以详尽的注释,我们可以更直观地掌握Spring的核心特性。 首先,Spring的核心在于其依赖注入(Dependency Injection, DI)...

    干它Spring.pdf

    文档介绍了工程的目录结构,展示了相关的Java类,如`AutowireCapableBeanFactory`、`BeanDefinition`、`SingletonBeanRegistry`等,这些类在Spring框架中扮演着关键角色,用于管理Bean的生命周期和依赖注入。...

    Spring 面试题分析_尚硅谷_佟刚

    控制反转(IoC)是将对象创建和对象之间的依赖关系转移给第三方(通常指Spring容器),从而实现对象之间的解耦合。依赖注入(DI)是IoC的实现方式之一。面向切面编程(AOP)允许开发者将横切关注点(例如日志和事务...

    Spring试题和答案.pdf

    例如,通过掌握`applicationContext.xml`配置文件的使用,开发者可以更加灵活地管理Spring Bean的生命周期和依赖关系;通过理解AOP的代理模式,可以设计出更符合SOLID原则的代码,提高软件的可维护性和可扩展性。 ...

    Spring技术内幕:深入解析Spring架构与设计原理(第2版)

    IoC是Spring框架的基础,它通过所谓的依赖注入(DI)来管理对象之间的依赖关系,减少了组件之间的耦合度,提升了系统的可维护性。在Spring中,Bean容器负责创建和管理应用中各个Bean的生命周期。 其次,AOP是Spring...

    Spring.pdf

    DI通过Spring的IoC容器实现,容器作为对象的管理者,负责创建对象、配置它们、管理它们的整个生命周期,包括对象间的依赖关系。在IoC容器中,对象通常以键值对(key-value)形式存储,对象的创建和属性的注入都由...

    spring_MVC中文教程pdf

    依赖注入是Spring框架的核心功能之一,它实现了控制反转(IoC)的设计模式,降低了组件之间的耦合度,提高了系统的可扩展性和可维护性。依赖注入分为三种实现类型:Type1接口注入、Type2构造子注入和Type3设值注入。...

    基于OSGi和Spring开发Web应用

    依赖注入机制更是让Spring成为解决对象间依赖关系问题的利器,提高了代码的可读性和可重用性。 将OSGi与Spring结合使用,可以充分发挥两者的优点,为企业级应用开发带来前所未有的灵活性和效率。Spring-DM,即...

Global site tag (gtag.js) - Google Analytics