`
wusuoya
  • 浏览: 641717 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

Spring -- 控制反转与依赖注入原理

    博客分类:
  • Java
 
阅读更多

在Spring中有两个非常重要的概念,那就是控制反转和依赖注入;控制反转将依赖对象的创建和管理交由Spring容器,而依赖注入则是在控制反转的基础上讲Spring容器管理的依赖对象注入到应用之中;那么控制反转和依赖注入的原理到底是什么呢?一言以蔽之,那就是:

XML文件解析+Java反射技术;

只要我们了解了如何进行XML解析以及Java的反射技术,那么我们完全可以实现自己的具有控制反转和依赖注入功能的小“框架”;下面我将就这个问题进行一下讨论。

首先是XML文件解析,我们都知道目前很多Java开源框架都有自己的xml配置文件,例如Struts、Hibernate和Spring都有各自的配置文件。但是配置文件无论多么复杂,简单来说都和我们在N久以前使用的ini文件差不多,他们的目标只有一个,那就是“配置”;应用程序中需要的一些信息都被保存在配置文件之中,应用程序通过读取配置文件来获得这些信息,唯一不同的是,xml文件由于其标准化、结构化、可扩展性等等优点,逐渐成为目前许多框架的配置文件的标准选项;当然,我们也应该认识到还是有一些其它选择的,比如Hibernate就可以使用properties文件作为配置文件;

那么具体到今天要讨论的Spring框架而言,对于配置文件的选择是xml文件。根据Spring的规范,配置文件的命名是没有特殊要求的,只是在文件的放置位置上有两种选择:类路径下或者操作系统文件目录下,我想这不应该存在任何问题,我们绝大多数情况都应该把配置文件放置在类路径之下,这我就不赘述了。

对于Spring的控制反转和依赖注入来说,唯一使用到的是配置文件中的<bean>标签,通过这个标签,Spring就完成了对象的创建和依赖对象的注入工作;下面我们就来看看它到底是如何实现的;

  • 首先对于配置文件中的<bean>节点,在Spring框架中存在一个对应的定义接口,叫做BeanDefinition;这个类定义了获得在<bean>节点中出现的所有属性的方法,例如className、scope等等;
  • 对于<bean>节点的子节点property则完成了属性注入的功能;我们都知道,属性注入有三种方式,那就是构造器注入、属性setter方法注入和注解方式注入;
  • 如果是setter方式注入,对于类属性xml配置文件也有两种方法,一是使用property节点的ref属性,一是使用property节点的子节点bean进行内部bean配置;如果是对于基本数据类型进行配置,那么要使用property节点的value属性;

搞清楚了以上的配置,那么如果我们希望实现一个自己的“小框架”,那么我们的步骤就是:

  1. 定义自己的关于bean节点、property节点的pojo类文件;
  2. 使用诸如DOM4J等开源包将配置文件读入;
  3. 使用Java的反射技术将配置文件中的信息setter到我们需要的属性中去;这里面我们可能要使用到common-beanutils.jar包;

分享到:
评论

相关推荐

    spring 控制反转和依赖注入.docx

    Spring 控制反转和依赖注入基础知识详解 Spring 框架是 Java 企业级开发的轻量级开发框架,于 2003 年创建,主要用于解决企业级开发的复杂性。其主要优势在于分层架构,允许在不同层级中使用一个组件(其他框架)...

    Spring 控制反转 依赖注入

    **Spring 框架中的控制反转 (IoC) 和依赖注入 (DI)** 在软件开发中,控制反转(Inversion of Control,简称IoC)是一种设计原则,它将对象的创建和管理权从代码中剥离出来,转交给一个外部容器(如Spring框架)。...

    spring技术--IOC控制反转课件.ppt

    其中,IOC(Inversion of Control,控制反转)是Spring的核心特性之一,它改变了传统对象创建和管理的方式,实现了依赖注入(Dependency Injection)。本课件主要介绍了Spring中的IOC原理、特点以及如何使用。 ### ...

    springIOC控制反转 依赖注入实例

    Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性,它改变了传统Java应用程序中对象的创建和管理方式。在传统的程序设计中,我们通常手动创建对象并管理它们之间的依赖关系,而在Spring中,这些...

    Spring 控制反转和依赖注入

    Spring 控制反转和依赖注入

    spring-framework-5.0.0.RELEASE-dist.zip

    开发者可以通过阅读这些文档快速上手,并深入学习Spring的高级特性,如依赖注入、AOP(面向切面编程)、数据访问、Web应用、测试等。 2. **libs文件夹**: 这个文件夹包含了Spring框架所需的jar包,这些jar包涵盖...

    spring-framework-master

    Spring的核心设计理念是依赖注入(Dependency Injection,简称DI),它通过反转控制(Inversion of Control,IoC)来降低组件之间的耦合度。这种设计模式使得应用程序的配置和业务逻辑分离,从而提高了代码的可测试...

    Martin Fowler 控制反转与依赖注入

    ### Martin Fowler 控制反转与依赖注入 #### 重要概念与背景 Martin Fowler的文章探讨了Java社区近期关注的一个热点话题:轻量级容器及其背后的模式。这些容器的主要目标是帮助开发者将来自不同项目的组件组装成一...

    spring的控制反转和依赖注入详解

    spring的控制反转和依赖注入详解

    自定义spring控制反转(依赖注入)

    在Spring框架中,控制反转(IoC,Inversion of Control)和依赖注入(DI,Dependency Injection)是核心设计理念,它们极大地简化了Java应用的开发和维护。本文将深入探讨如何自定义Spring实现读取`...

    Spring-4.0.3jar包

    Spring框架是Java开发中的核心组件,它以IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)为核心,极大地简化了企业级应用的开发工作。Spring-4.0.3是Spring框架的一个...

    Spring_01_入门篇_依赖注入(控制反转)_ANN

    在"Spring_01_入门篇_依赖注入(控制反转)_ANN"的学习过程中,你可以首先了解Spring的基本概念和IoC/DI原理,然后通过注解驱动的配置来实践创建和管理bean。接着,逐步探索三层架构的实现,从编写DAO、Service到...

    spring-framework-reference-4.3.19.pdf

    - **依赖注入与控制反转**:Spring的核心功能之一是依赖注入(DI),这是一种设计模式,用于实现松耦合的应用程序组件。控制反转(IoC)容器负责管理对象的生命周期和配置,从而实现了依赖注入。 - **框架模块**: ...

    spring.jar spring-webmvc-struts.jar spring-webmvc.jar

    这个库可能包含了一些桥接代码,帮助开发者将Spring的IoC(Inversion of Control,控制反转)和AOP功能与Struts的MVC架构结合在一起,使得在基于Struts的项目中可以利用Spring的优点。 "spring-webmvc.jar"则是...

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

    核心容器包括Bean工厂(BeanFactory)和ApplicationContext,它们是Spring的核心,负责对象的创建、管理及依赖注入。 在`spring-framework-5.1.4.RELEASE-docs.zip`中,我们可以找到详细的API文档和用户指南,这些...

    mybatis-spring-1.3.3.jar官方下载

    Spring 以其 IoC(Inversion of Control,控制反转)和 DI(Dependency Injection,依赖注入)为核心,极大地简化了 Java 应用的开发。 MyBatis-Spring 的主要功能包括: 1. **SqlSessionTemplate**:这是一个 ...

    spring依赖注入的实现原理

    在Spring框架中,依赖注入是核心特性之一,通过控制反转(Inversion of Control,IoC)实现了组件之间的解耦。 ### 依赖注入的基本概念 依赖注入允许开发者在不修改代码的情况下,通过配置来改变对象间的依赖关系。...

    spring-framework-reference

    - **依赖注入与控制反转**:依赖注入是一种软件设计模式,它通过将依赖关系从组件内部移除并由外部容器注入来降低组件之间的耦合度。 - **模块划分**:Spring 框架被分为几个模块,每个模块负责不同的功能领域: - ...

    spring 4.* 缺少jar spring-cglib-repack-3.2.5.jar_spring-objenesis-repack-2.6.jar

    - 对于未实现接口的类,Spring可能无法正确地创建代理对象,进而影响到依赖注入和控制反转的正常运行。 解决这个问题的方法是将这两个jar文件添加到项目的类路径(classpath)中。通常,这可以通过以下方式完成: -...

    spring-framework-4.3.5 所有JAR文件包

    - Spring的核心组件,提供了依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP)功能。DI是Spring的核心特性,它允许对象之间的关系在运行时动态地配置,而不是硬编码在代码...

Global site tag (gtag.js) - Google Analytics