`
lh_kevin
  • 浏览: 43999 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

spring--依赖注入

    博客分类:
  • ssh2
阅读更多

依赖注入(非原创)

 

Spring 能有效地组织J2EE应用各层的对象。不管是控制层的Action对象,还是业务层的Service对象,还是持久层的DAO对象,都可在Spring的 管理下有机地协调、运行。Spring将各层的对象以松耦合的方式组织在一起,Action对象无须关心Service对象的具体实现,Service对 象无须关心持久层对象的具体实现,各层对象的调用完全面向接口。当系统需要重构时,代码的改写量将大大减少。

上面所说的一切都得宜于Spring的核心机制----依赖注入。依赖注入让bean与bean之间以配置文件组织在一起,而不是以硬编码的方式耦合在一起。

 

什么是依赖注入?
依赖注入(Dependency Injection)和控制反转(Inversion of Control)是同一个概念。具体含义是:当调用者(比如说Action)需要调用另一个被调用者时(比如说Service),在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。

不管是依赖注入,还是控制反转,都说明Spring采用动态、灵活的方式来管理各种对象。对象与对象之间的具体实现互相透明。

在理解依赖注入之前,看如下这个问题在各种社会形态里如何解决:一个人(Java实例,调用者)需要一把斧子(Java实例,被调用者)。

 

(1)原始社会里,几乎没有社会分工。需要斧子的人(调用者)只能自己去磨一把斧子(被调用者)。对应的情形为:Java程序里的调用者自己创建被调用者。

(2)进入工业社会,工厂出现。斧子不再由普通人完成,而在工厂里被生产出来,此时需要斧子的人(调用者)找到工厂,购买斧子,无须关心斧子的制造过程。对应Java程序的简单工厂的设计模式。

(3)进入“按需分配”社会,需要斧子的人不需要找到工厂,坐在家里发出一个简单指令:需要斧子。斧子就自然出现在他面前。对应Spring的依赖注入。

第一种情况下,Java实例的调用者创建被调用的Java实例,必然要求被调用的Java类出现在调用者的代码里。无法实现二者之间的松耦合。

第二种情况下,调用者无须关心被调用者具体实现过程,只需要找到符合某种标准(接口)的实例,即可使用。此时调用的代码面向接口编程,可以让调用者和被调用者解耦,这也是工厂模式大量使用的原因。但调用者需要自己定位工厂,调用者与特定工厂耦合在一起。

第三种情况下,调用者无须自己定位工厂,程序运行到需要被调用者时,系统自动提供被调用者实例。事实上,调用者和被调用者都处于Spring的管理下,二者之间的依赖关系由Spring提供。

所谓依赖注入,是指程序运行过程中,如果需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部的注入。Spring的依赖注入对调用者和被调用者几乎没有任何要求,完全支持对POJO之间依赖关系的管理。

分享到:
评论

相关推荐

    spring-cglib-repack-3.2.4.jar和spring-objenesis-repack-2.5.1.jar

    Spring框架的核心包括依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)。依赖注入允许组件之间松耦合,而AOP则用于实现跨切面的关注点,如日志记录、事务管理等。这两个jar...

    spring-5.3.9-dist.zip(spring-framework-5.3.9)

    Spring框架的核心理念是依赖注入(Dependency Injection,DI),它简化了组件之间的耦合,使得代码更加灵活和易于测试。在5.3.9版本中,DI机制得到了进一步的增强,支持更复杂的依赖配置和更好的类型安全。 `docs`...

    spring-cglib-repack-3.2.5.jar,spring-objenesis-repack-2.6.jar

    在Java开发领域,Spring框架是不可或缺的重要组成部分,它为开发者提供了强大的依赖注入、AOP(面向切面编程)以及各种企业级服务。标题中的"spring-cglib-repack-3.2.5.jar"和"spring-objenesis-repack-2.6.jar"是...

    spring-ai-core 0.8.1

    这意味着你可以直接利用这些框架的模型,并通过Spring的依赖注入机制将它们注入到你的服务中。这种跨框架的兼容性使得项目可以灵活地选择最适合的AI工具,同时保持代码的整洁和可维护性。 在API设计上,Spring AI ...

    spring导入eclipse时少的spring-cglib-repack-3.2.4.jar和spring-objenesis-repack-2.4.jar

    通过这种方式,Spring能够注入切面逻辑,比如日志记录、事务管理等,即使在不修改原有代码的情况下也能实现扩展功能。 其次,`spring-objenesis-repack-2.4.jar`是Objenesis库的一个版本,Objenesis是一个用于创建...

    spring-beans-3.0.xsd

    在Spring框架中,`spring-beans`是核心组件之一,它负责管理对象的生命周期和依赖关系。`spring-beans`的配置文件通常以`.xsd`为后缀,这些文件定义了XML Schema,用于验证Spring配置文件的语法和结构。本文将深入...

    spring-context-4.2.xsd.zip

    在Java企业级开发中,Spring框架扮演着至关重要的角色,尤其在Spring的Context模块中,通过XML Schema(XSD)进行配置,使得应用程序的组件管理和依赖注入变得简洁高效。本文将深入探讨Spring框架的Context模块以及...

    spring-test-3.2.0.RELEASE.jar

    通过`@MockBean`注解,可以在Spring容器中注入一个Mock对象,而`@SpyBean`则可以创建一个部分模拟的Bean。同时,`when()`和`thenReturn()`等方法可以定义Mock对象的行为,实现精确的预期控制。 3. **Web应用测试:*...

    spring-boot-starter-mybatis-spring-boot-1.0.2.zip

    (1) 添加依赖:在项目的pom.xml或build.gradle文件中,引入Spring Boot Starter MyBatis的依赖。对于1.0.2版本,对应的Maven依赖如下: ```xml <groupId>org.springframework.boot <artifactId>spring-boot-...

    spring-framework-reference-4.3.19.pdf

    - **Spring依赖**:了解Spring框架与其他库之间的依赖关系非常重要。 - **Maven依赖管理**:使用Maven来管理项目的依赖项,Spring提供了特定的“物料清单”(BOM)依赖项,以简化版本管理。 - **Gradle依赖管理**:...

    spring4源码所需要的spring-objenesis-repack-2.1.jar,spring-cglib-repack-3.1.jar

    3. **Spring Core**: `spring-core-4.1.3.BUILD-SNAPSHOT.jar` 是Spring框架的核心组件,包含了Spring的核心功能,如依赖注入(DI)、资源管理、类型转换系统和SpEL(Spring Expression Language)。这些组件是...

    mybatis-spring-1.2.0.jar

    MyBatis是一个灵活的SQL映射框架,它将SQL与Java代码分离,而Spring是一个全面的企业级应用框架,它支持依赖注入、AOP(面向切面编程)和其他关键功能。 在压缩包子文件的文件名称列表中,我们有两个文件:"分享类...

    spring-framework-4.2.4.RELEASE.7z

    总的来说,Spring框架4.2.4.RELEASE提供了强大的功能,包括依赖注入、AOP、数据访问、web开发等多个方面。通过文档、库文件和XML架构,开发者可以深入理解其工作原理,并利用这些工具构建高效、可维护的Java应用。这...

    spring-framework-5.0.2.RELEASE官方完整包加官方文档

    Spring Framework的核心特性包括依赖注入(Dependency Injection, DI)、面向切面编程(Aspect-Oriented Programming, AOP)、模型-视图-控制器(Model-View-Controller, MVC)架构模式,以及对Java EE标准和第三方...

    struts2-spring-plugin-2.2.1.jar

    这个插件的主要目的是简化在基于Struts2的应用程序中整合Spring的功能,如依赖注入(DI)、AOP(面向切面编程)以及事务管理等。下面我们将深入探讨Struts2、Spring框架以及它们之间的集成。 **Struts2框架** ...

    struts2-spring-plugin-2.3.4.jar

    在Java Web开发中,这两个框架经常一起使用,Spring 提供了依赖注入(DI)和面向切面编程(AOP)等功能,而 Struts 2 则是一个强大的MVC(Model-View-Controller)框架,负责处理用户请求和业务逻辑。 Struts 2 和 ...

    spring-frmaework 4.1.2

    Spring的核心特性之一是依赖注入,它允许开发者通过外部配置来管理对象之间的依赖关系,而不是在代码内部硬编码这些依赖。这增强了代码的灵活性和可测试性。 2. **AOP(Aspect-Oriented Programming, 面向切面编程...

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

    这个核心库支持依赖注入,这是Spring最著名和最广泛使用的特性,它使得组件之间的耦合度降低,增强了代码的可测试性。 "spring-webmvc-struts"可能指的是Spring与Struts的集成包,Struts是另一个流行的Java Web MVC...

    spring-framework-5.3.23 源码

    首先,让我们深入了解一下Spring的核心概念——依赖注入(Dependency Injection,简称DI)。在Spring框架中,DI是通过容器来管理对象的生命周期和相互依赖关系。这使得开发者可以避免硬编码依赖,提高代码的可测试性...

    spring-context.xsd

    在Java开发领域,Spring框架是一个不可或缺的工具,其强大的依赖注入(Dependency Injection,简称DI)特性使得应用程序的构建变得更加灵活和易于管理。而`spring-context.xsd`文件在Spring框架中扮演着重要的角色,...

Global site tag (gtag.js) - Google Analytics