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中又以下的限制:
不能对构造函数中的参数进行检查。
即使属性中有默认值,只要包含了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内核的机会,让我们能够深入理解其工作原理,提升我们的开发技能。 首先,我们要了解Spring Framework的基本架构。Spring的核心在于IoC(Inversion of Control)和AOP...
总结来说,Spring内核的精髓在于其依赖注入和面向切面编程的理念,以及强大的容器管理和数据访问集成能力。通过对这些核心概念的理解,开发者可以更好地利用Spring构建出灵活、可扩展且易于维护的系统。
1. **自动配置**:SpringBoot 的核心特性之一,它会根据项目依赖自动配置相关的 Spring Bean,比如添加了 JPA 依赖,就会自动配置数据源和实体管理等。 2. **内嵌式 Web 服务器**:SpringBoot 内置了 Tomcat 或 ...
通过配置文件或者注解,开发者可以定义对象及其依赖关系,Spring容器会自动管理这些对象的生命周期,包括实例化、初始化、装配和销毁。 **Bean** 在Spring中,业务逻辑的组件被称为Bean。Bean是Spring容器管理的...
1.4.0.RELEASE版本中,框架会根据引入的依赖自动配置相应的Bean,如Tomcat、JPA、Spring Data等,大大减少了开发者的手动配置工作。 3. **Actuator增强** Actuator是Spring Boot用于监控和管理应用的模块,在1.4.0...
标题中的"mirrors-Spring-Framework-master"可能指的是一个包含Spring Framework源码镜像的仓库,这为我们提供了深入学习和理解Spring内核的机会。描述中的“小工具,灵活性强”强调了Spring框架的一个核心特点——...
在源码中,我们可以看到Spring如何通过@Autowired、@Resource等注解来实现自动装配,以及BeanFactory和ApplicationContext是如何管理Bean的生命周期和依赖关系的。 2. **面向切面编程(Aspect-Oriented Programming...
关于Spring的IOc原理,它通过配置文件描述bean和它们之间的依赖关系,并利用Java的反射功能实例化这些bean,建立它们之间的依赖关系。Spring的IoC容器在这些基础上提供了更多高级服务,比如bean的实例缓存、生命周期...
"springbook-master.rar"这个压缩包文件,显然包含了与Spring框架相关的源码分析资料,为开发者提供了深入了解Spring内核的机会。下面我们将详细探讨Spring框架的核心概念、主要模块以及源码学习的重要性。 1. **...
1. **依赖注入(Dependency Injection, DI)**:Spring的核心特性之一,它允许我们将对象之间的依赖关系从代码中解耦出来,通过配置文件或注解来管理。DI使得组件间的耦合度降低,提高了代码的可测试性和可维护性。在...
尚硅谷的Spring学习源码提供了一种深入理解Spring内核及其工作原理的方式,通过亲手敲码并辅以详尽的注释,我们可以更直观地掌握Spring的核心特性。 首先,Spring的核心在于其依赖注入(Dependency Injection, DI)...
文档介绍了工程的目录结构,展示了相关的Java类,如`AutowireCapableBeanFactory`、`BeanDefinition`、`SingletonBeanRegistry`等,这些类在Spring框架中扮演着关键角色,用于管理Bean的生命周期和依赖注入。...
控制反转(IoC)是将对象创建和对象之间的依赖关系转移给第三方(通常指Spring容器),从而实现对象之间的解耦合。依赖注入(DI)是IoC的实现方式之一。面向切面编程(AOP)允许开发者将横切关注点(例如日志和事务...
例如,通过掌握`applicationContext.xml`配置文件的使用,开发者可以更加灵活地管理Spring Bean的生命周期和依赖关系;通过理解AOP的代理模式,可以设计出更符合SOLID原则的代码,提高软件的可维护性和可扩展性。 ...
IoC是Spring框架的基础,它通过所谓的依赖注入(DI)来管理对象之间的依赖关系,减少了组件之间的耦合度,提升了系统的可维护性。在Spring中,Bean容器负责创建和管理应用中各个Bean的生命周期。 其次,AOP是Spring...
DI通过Spring的IoC容器实现,容器作为对象的管理者,负责创建对象、配置它们、管理它们的整个生命周期,包括对象间的依赖关系。在IoC容器中,对象通常以键值对(key-value)形式存储,对象的创建和属性的注入都由...
依赖注入是Spring框架的核心功能之一,它实现了控制反转(IoC)的设计模式,降低了组件之间的耦合度,提高了系统的可扩展性和可维护性。依赖注入分为三种实现类型:Type1接口注入、Type2构造子注入和Type3设值注入。...
依赖注入机制更是让Spring成为解决对象间依赖关系问题的利器,提高了代码的可读性和可重用性。 将OSGi与Spring结合使用,可以充分发挥两者的优点,为企业级应用开发带来前所未有的灵活性和效率。Spring-DM,即...