`
anyeeye
  • 浏览: 143905 次
  • 来自: ...
社区版块
存档分类
最新评论

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

阅读更多
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到springmvc再到springboot的逐步简化代码的过程,核心功能都没有改变,如::IOC、AOP、Bean生命周期、依赖的作用域、文件的上传和下载等内容实现。 适合人群:具备一定编程基础,掌握了spring全家桶或者...

    战争雷霆warthunder解包工具-exe版本-可应用于enlisted入伍等游戏

    阅读建议:此资源以开发简化版Spring学习其原理和内核,不仅是代码编写实现也更注重内容上的需求分析和方案设计,所以在学习的过程要结合这些内容一起来实践,并调试对应的代码。 能学到什么:①工厂模式、策略模式...

    干它Spring.pdf

    完成 Spring 的框架雏形后,通过单元测试进行手动操作 Bean 对象的定义、注册和属性填充,以及最终获取对象调用方法..... 以开发简化版Spring学习其原理和内核的知识内容,不仅是代码编写实现也更注重内容上的需求...

    apache-tomcat-8.0.32

    apache-tomcat-8.0.32 ...阅读建议:此资源以开发简化版Spring学习其原理和内核,不仅是代码编写实现也更注重内容上的需求分析和方案设计,所以在学习的过程要结合这些内容起来实践,并调试对应的代码。

    【基于java-ssm】大学生兼职论坛管理系统实现源码+lw+部署文档+讲解

    在实现过程中,将提炼出 Spring 框架的核心逻辑,简化代码实现过程,保留重要功能,例如:IOC(控制反转)、AOP(面向切面编程)、Bean 生命周期管理、应用上下文、作用域、资源处理等内容。 适合人群:具备一定...

    apache-zookeeper-3.7.1-bin.tar.gz

    apache-zookeeper-3.7.1-bin.tar.gz ...阅读建议:此资源以开发简化版Spring学习其原理和内核,不仅是代码编写实现也更注重内容上的需求分析和方案设计,所以在学习的过程要结合这些内容起来实践,并调试对应的代码。

    后端开发+SSM+图书管理系统+附带有项目报告

    我们学校做的课程设计作业,源代码+...阅读建议:此资源以开发简化版Spring学习其原理和内核,不仅是代码编写实现也更注重内容上的需求分析和方案设计,所以在学习的过程要结合这些内容一起来实践,并调试对应的代码。

    Apifox-windows-latest

    内容概要:通过带着读者手写简化版Spring...阅读建议:此资源以开发简化版Spring学习其原理和内核,不仅是代码编写实现也更注重内容上的需求分析和方案设计,所以在学习的过程要结合这些内容起来实践,并调试对应的代码。

    SSM+人事管理系统+后台作业项目+附带有项目报告

    我们学校做的课程设计,内附有源代码...阅读建议:此资源以开发简化版Spring学习其原理和内核,不仅是代码编写实现也更注重内容上的需求分析和方案设计,所以在学习的过程要结合这些内容一起来实践,并调试对应的代码。

    apache-maven-3.2.5.zip

    apache-maven-3.2.5.zip ...阅读建议:此资源以开发简化版Spring学习其原理和内核,不仅是代码编写实现也更注重内容上的需求分析和方案设计,所以在学习的过程要结合这些内容起来实践,并调试对应的代码。

    蓝色简约风毕业答辩PPT

    阅读建议:此资源以开发简化版Spring学习其原理和内核,不仅是代码编写实现也更注重内容上的需求分析和方案设计,所以在学习的过程要结合这些内容一起来实践,并调试对应的代码。 通过带着读者手写简化版 Spring ...

    zookeeper-3.4.6.zip

    zookeeper-3.4.6.zip ...阅读建议:此资源以开发简化版Spring学习其原理和内核,不仅是代码编写实现也更注重内容上的需求分析和方案设计,所以在学习的过程要结合这些内容起来实践,并调试对应的代码。

    Management-System-of-company:项目使用Servlet + mybatis构建的Web项目,目的是为了进一步熟悉mybatis的进一步配置,根据spring的内核编写了FormBean进行使用

    为了进一步熟悉SSM框架,我单独摘出了mybatis部署在普通的java Web项目上,从spring上插入了依赖注入,自己根据反射编写了一个映射工具类,可以根据前端返回的信息来封装bean FormBean如下 public class FormBean { ...

    Video基础知识简介

    Video基础知识简介 ...阅读建议:此资源以开发简化版Spring学习其原理和内核,不仅是代码编写实现也更注重内容上的需求分析和方案设计,所以在学习的过程要结合这些内容一起来实践,并调试对应的代码

    黑马程序员ssm代码分享

    阅读建议:此资源以开发简化版Spring学习其原理和内核,不仅是代码编写实现也更注重内客上的需求分析和方案设计,所以在学习的过程要结合这些内客一起来实践,并调试对应的代码。 本代码基于黑马程序员的课程,最好...

    软件工程课堂笔记+期末试题

    软件工程课堂笔记+期末试题.... ...阅读建议:此资源以开发简化版Spring学习其原理和内核,不仅是代码编写实现也更注重内容上的需求分析和方案设计,所以在学习的过程要结合这些内容—起来实践,并调试对应的代码。

    期末课设,基于·Android·开发

    在手写Spring 源码的过程中会摘取整体框架中的核心逻辑,简化代码实现过程,保留核心功能,例如:IOC、AOP、Bean生命周期、上下文、作用域、资源处理等内容实现。 适合人群:具备一定编程基础,工作1-3年的研发人员 ...

    该项目是gradle+springboot+freemarker的项目,是对学生基本信息的增删改查。

    在手写Spring 源码的过程中会摘取整体框架中的核心逻辑,简化代码实现过程,保留核心功能,例如:IOC、AOP、Bean生命周期、上下文、作用域、资源处理等内容实现。 适合人群:具备一定编程基础,工作1-3年的研发人员 ...

    SSM+课程设计+项目源代码+thymleaf

    在手写Spring 源码的过程中会摘取整体框架中的核心逻辑,简化代码实现过程,保留核心功能,例如:IOC、AOP、Bean生命周期、上下文、作用域、资源处理等内容实现。 适合人群:具备一定编程基础,工作1-3年的研发人员 ...

    maven3.6.3.zip

    maven3.6.3.zip 内容概要:通过带着读者手写...阅读建议:此资源以开发简化版Spring学习其原理和内核,不仅是代码编写实现也更注重内容上的需求分析和方案设计,所以在学习的过程要结合这些内容起来实践,并调试对应的代码。

Global site tag (gtag.js) - Google Analytics