`
李灵晖-raylee
  • 浏览: 135673 次
博客专栏
Group-logo
从头认识java
浏览量:0
文章分类
社区版块
存档分类
最新评论

1.1.1 Spring里面的依赖注入思想

 
阅读更多

1.spring,他的目的就是简化java 的编写工作

例子1:

public class PersonOfOnlySingingASong extends Person {
	private SingASongImpl sing;
	
	public	PersonOfOnlySingingASong(){
		sing = new SingASongImpl();
	}
	
	public void singOnQuest() {
		sing.singASong();
	}
}



上面的例子在PersonOfOnlySinging运行构造方法的时候,就已经把sing这个类生成了实例,这样其实是很难进行单元测试与重用,这个人只能唱A这首歌,唱其他的就不行了,简单的说耦合太高了,两个类紧紧相依,无法分开。

由于上面的例子不便于测试(因为每次测试都需要保证SingASong的实现)还有不便于重用,所以产生了下面的例子

例子2:

public class PersonOfNotOnlySingingASong extends Person {
	private ISing sing;
	
	public	PersonOfNotOnlySingingASong(ISing sing){
		this.sing = sing;
	}
	
	public void singOnQuest() {
		sing.singASong();
	}
	
	public static void main(String[] args) {
		PersonOfNotOnlySingingASong temp= new PersonOfNotOnlySingingASong(new SingASongImpl());
		temp.singOnQuest();
	}
}




所谓的注入:就是往接口里面放入一个实现,而这个实现不是这个人生成的时候就已经具备的,而是由这个人去控制选择实现,也就是控制反转,控制实现哪个被反转了,不再有生成人的那一刹那决定,而是把控制权放到了人生成后需要什么就实现什么


在上面的例子里面,我们引入接口ISing,SingASongImpl现在就变成只是ISing的一个实现,也许我们会有其他的实现(如:SingBSong等),这样,Person就不单单只是唱一首歌,而是变成(或者说是抽象成)一种能力“唱歌”,这个人会唱歌,这是一个抽象(也是平常说的接口),他不一定唱A这首歌,还可以唱其他歌曲,只有有其他歌曲的实现,他照样能够唱出来。所以,上面的例子体现了Spring里面其中一种注入方式:构造器注入


扩展:

接口:(我觉得下面的解释会比较清楚)

interface就是一种介面﹐规定欲沟通的两物件(平常说的对象Object的另外一个说法)﹐其通讯该有的规范有哪些。一些函数或资料成员﹐为另一些属于不同类别的物件所需共同拥有﹐则将这些函数与资料成员﹐定义在一个interface中﹐然后让所有不同类别的Java物件(平常说的对象Object的另外一个说法)可以共同操作使用之。


如果我在上面的例子中还不满意那个人只能唱歌,我就可以再定义一个空接口IDo(定义这个人可以做事情,唱歌只是Do里面的其中一部分,Sing继承Do)

例子:

public class PersonOfDo extends Person {
	private IDo domainOfDo;
	
	public	PersonOfDo(IDo doThing){
		this.domainOfDo = doThing;
	}
	
	public void doOnQuest() {
		domainOfDo.doThing();
	}
	
	public static void main(String[] args) {
		SingASongImpl singASongImpl = new SingASongImpl();
		PersonOfDo personOfDo = new PersonOfDo(singASongImpl);
		personOfDo.doOnQuest();
	}
}





版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    mybatis-spring-1.1.1-bundle

    在Java开发领域,MyBatis和Spring是两个非常重要的框架,它们各自在持久层和依赖注入方面表现出色。MyBatis-Spring作为一个桥梁,将这两个优秀框架无缝集成,使得开发更加高效、灵活。本文将深入探讨mybatis-spring-...

    spring-aop-jar

    在IT领域,Spring框架是一个广泛使用的Java应用框架,它提供了许多功能,包括依赖注入、面向切面编程(AOP)等。"spring-aop-jar"这个主题涉及到Spring框架中的核心组件之一——Spring AOP。这里我们将深入探讨...

    mybatis的jar包mybatis-3.1.1.jar与mybatis-spring-1.1.1.jar

    Spring框架则是一个全面的企业级应用开发平台,它鼓励依赖注入(DI)和面向切面编程(AOP),并提供了诸如事务管理、数据库连接池等核心服务。MyBatis-Spring-1.1.1.jar是MyBatis与Spring集成的桥梁,使得MyBatis...

    spring mvc 依赖包

    4. `spring-core.jar`和`spring-beans.jar`: 这两个库提供了Spring框架的基础功能,如IoC(控制反转)和DI(依赖注入),以及Bean的定义和管理。 5. `spring-context.jar`: 提供了上下文相关的服务,如事件发布、...

    spring-mybatis-spring-1.1.1.zip

    具体依赖版本可以根据实际需求和兼容性选择,但"spring-mybatis-spring-1.1.1"版本是针对这次整合的一个推荐版本。 4. **配置Spring**:在application.properties或application.yml中,配置数据库连接信息,如...

    mybatis-spring-1.1.1.zip

    Spring 框架则是一个全面的企业级应用开发框架,提供了依赖注入(DI)、面向切面编程(AOP)、事务管理等核心功能,以及对其他多种框架的集成。 MyBatis-Spring 的主要功能包括: 1. **自动扫描和配置**:它会自动...

    MyBatis3.2.1.jar+MyBatis-Spring1.1.1.jar

    1. **依赖注入**:MyBatis-Spring支持通过Spring的依赖注入来创建SqlSessionFactory和SqlSessionTemplate,使得这些关键对象的管理变得更加方便。 2. **Mapper集成**:MyBatis的Mapper接口可以直接在Spring的上下文...

    Spring+in+action+中文版(第4版)

    - **2.2.1 Spring 的依赖注入方式**:介绍Spring中常用的依赖注入方式,如构造器注入、设置方法注入等。 - **2.2.2 依赖注入的优点**:讨论依赖注入模式的优点及其对代码可测试性和可维护性的影响。 #### 2.3 ...

    spring framework 3.2.4 组件依赖关系及完整依赖包

    其依赖注入(DI)和AOP特性使得代码更加灵活和易于维护。 6. **最佳实践**: - 使用Maven或Gradle等构建工具管理依赖,确保所有依赖项的版本兼容。 - 根据项目需求选择引入必要的Spring模块,避免不必要的包体积...

    spring-boot-starter-mybatis-spring-boot-1.1.1.tar.gz

    《Spring Boot集成MyBatis详解:从1.1.1版本到最新》 Spring Boot以其“简化Spring应用程序初始搭建以及开发过程”的理念,受到了广大开发者的喜爱。在微服务架构中,Spring Boot与MyBatis的结合更是常见,因为...

    spring-5.2.6.RELEASE-dist+commons-logging-1.1.1.jar

    Spring框架是Java后端开发中的核心组件之一,其5.2.6.RELEASE版本是一个稳定且功能丰富的版本,为开发者提供了强大的依赖注入、AOP(面向切面编程)、任务调度等服务。本资源包包含了Spring框架的这个特定版本及其...

    spring-boot-starter-mybatis-spring-boot-1.1.1.zip

    首先,`spring-boot-starter-mybatis`是Spring Boot为MyBatis提供的一个起步依赖,它简化了MyBatis在Spring Boot中的配置和使用。通过引入这个依赖,我们可以快速地在Spring Boot项目中构建起MyBatis的数据访问层。 ...

    初学Spring所需最基本的6个jar包(core、context、beans、expression、logging1.1.1、log4j-1.2.15)

    Spring框架是Java开发中不可或缺的一部分,它为应用程序提供了一个全面的基础设施,包括依赖注入、面向切面编程、数据访问、事务管理以及许多其他服务。在初学者阶段,了解并掌握Spring的基本jar包是非常重要的,这...

    spring in action Thrid 第一章重点内容

    依赖注入允许Spring在运行时将依赖关系注入到对象中,而不是让对象自己去查找或创建依赖。这有助于保持应用对象之间的独立性,如章节中提到,通过依赖注入可以使应用程序对象彼此解耦。 3. **声明式编程**:Spring...

    Spring ROO 1.1.0 升级到 1.1.1(中文)

    本文档主要介绍如何将Spring ROO 1.1.0升级到1.1.1版本,以及在1.1.1版本中的一些关键改动。 ### 1. 通用升级步骤 在升级Spring ROO的任何版本时,都需要遵循一定的流程来确保数据安全和项目兼容性: **备份**: ...

    mybatis-3.2.0-SNAPSHOT.jar mybatis-spring-1.1.1.jar

    1. **SqlSessionTemplate和SqlSessionFactoryBean**:这两个类是mybatis-spring的核心,它们帮助我们在Spring环境中无缝地使用MyBatis,实现依赖注入和事务管理。 2. **MapperScannerConfigurer**:这个配置类可以...

    Spring攻略PDF版

     1.3 应用控制反转和依赖注入   1.3.1 问题描述   1.3.2 解决方案   1.3.3 实现方法   1.4 理解不同类型的依赖注入   1.4.1 问题描述   1.4.2 解决方案   1.4.3 实现方法   1.5 ...

    Spring攻略中文版PDF

     1.3 应用控制反转和依赖注入   1.3.1 问题描述   1.3.2 解决方案   1.3.3 实现方法   1.4 理解不同类型的依赖注入   1.4.1 问题描述   1.4.2 解决方案   1.4.3 实现方法   1.5 ...

    Spring攻略英文版(附带源码)

     1.3 应用控制反转和依赖注入   1.3.1 问题描述   1.3.2 解决方案   1.3.3 实现方法   1.4 理解不同类型的依赖注入   1.4.1 问题描述   1.4.2 解决方案   1.4.3 实现方法   1.5 使用配置...

    spring in action Thrid 第二章重点内容

    综上所述,《Spring in Action 第三版》第二章的核心内容是展示了Spring如何通过轻量级设计、依赖注入、声明式编程和减少冗余代码的策略,来实现Java开发的简化和优化。这些概念和实践贯穿整个Spring框架,为开发者...

Global site tag (gtag.js) - Google Analytics