`

Spring学习笔记之依赖注入(更新中)

阅读更多

    Spring为企业应用开发提供一个轻量级的解决方案。该解决方案包括基于依赖注入的核心机制,基于AOP的声明式事务管理,与多种持久层技术的整合,以及优秀的Web MVC框架等。

    Spring完成实际 开发中需要实现的设计模式:工厂和单态。使用Spring将意味着开发者无须自己提供单态和工厂模式。


     理解依赖注入

     依赖注入和控制反转是同一概念,具体的含义是:当某个角色(可能是以个java实例,调用者)需要另一个角色(另一个java实例,被调用者)的协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者实例的工作通常有Spring容器来完成,然后注入调用者,因此也称为依赖注入。

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


   定义person接口

public interface person {
	
	public void useAxe();

}

 

定义Axe接口

 

public interface Axe {
	
	public String chop();

}

 

person实现类

 

public class Chinese implements person {
	
	private Axe axe ;

	public void useAxe() {
		
		System.out.println(axe.chop());

	}

	public void setAxe(Axe axe) {
		this.axe = axe;
	}

}
 

Axe实现类

 

public class StoneAxe implements Axe {

	public String chop() {
		return "石斧砍柴很慢";
	}
}
 

 

applicationContext.xml

 

    <bean id="StoneAxe" class="com.hongjindong.spring.StoneAxe"/>
    <bean id ="Chinese" class="com.hongjindong.spring.Chinese">
    	<property name="axe" ref="StoneAxe"></property>
    </bean>

 

客户端Client

 

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Client {
	
	public static void main(String[] args) {

		BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
		
		person people = (person)factory.getBean("Chinese");
		people.useAxe();
	}

}

 

如果想用构造注入的方法:


person类的构造函数应该对axe进行初始化:

public class Chinese implements person {
	
	private Axe axe ;

	public void useAxe() {
		
		System.out.println(axe.chop());

	}

	public void setAxe(Axe axe) {
		this.axe = axe;
	}

}


 构造注入应该修改applicationContext.xml为

 

    <bean id="StoneAxe" class="com.hongjindong.spring.StoneAxe"/>
    <bean id ="Chinese" class="com.hongjindong.spring.Chinese">
    	<constructor-arg ref="StoneAxe"></constructor-arg>
    </bean>
 

      设值注入的优点:

      (1)与传统的JavaBean的写法更相似,程序开发人员更容易了解、接收。通过setter方法设定依赖关系显得更加直观、自然

      (2)对于复杂的依赖关系,如果采用构造注入,会导致构造器过于臃肿,难以阅读。Spring在创建bean实例时,需要同时实例化器以来的全部实例,因而导致性能下降。二是用设值注入,则能避免这些问题。

      (3)尤其是某些属性可选的情况下,多参数的构造器更加笨重。


    构造注入的优点:

     (1)可以在构造器中决定依赖关系的注入顺序,优先依赖的优先注入。

     (2)对于依赖关系无需变化的bean,构造注入更有用处。因为没有setter方法,所有的依赖关系全部在构造器内设定。因此,无须担心后序的代码对依赖关系产生破坏。

     (3)依赖关系只能在构造器中设定,则只有组件的创建者才能改变组件的依赖关系。对组件的调用者而言,组件内部的依赖关系完全透明,更符合高内聚的原则。


        建议采用以设值注入为主,构造注入为辅的注入策略。对于依赖关系无须变化的注入,尽量采用构造注入;而其他的依赖关系的注入,则考虑采用设值注入。

在javaeye论坛中找到不错的博文:

http://www.iteye.com/topic/493282



分享到:
评论

相关推荐

    Spring 学习笔记《依赖注入》源文件

    Spring 学习笔记《依赖注入》源文件。https://blog.csdn.net/jx520/article/details/86549841

    javaSpring学习笔记

    在“Java Spring学习笔记”中,你将找到对Spring框架的全面介绍,包括IoC(控制反转)和DI(依赖注入)原理、AOP(面向切面编程)、Spring MVC、Spring Boot等核心内容。每个主题都结合了理论知识和实际示例,帮助你...

    Spring学习笔记(6)----编码剖析Spring依赖注入的原理

    NULL 博文链接:https://coolszy.iteye.com/blog/512193

    Spring学习笔记(5)----依赖注入的简单实现

    NULL 博文链接:https://coolszy.iteye.com/blog/510194

    Spring学习笔记

    Spring学习笔记Spring spring的配置 IOC 依赖注入 基于Xml的注入 基于注释的注入 Spring的自动注入和属性自动注入 AOP 静态代理 动态代理 使用spring实现AOP 基于Annotation实现AOP 基于XML实现AOP ...

    狂神说Java-Spring学习笔记

    狂神说Java——Spring学习笔记 内容概要: 1、了解什么是Spring 2、IOC 3、Spring配置 4、依赖注入 5、Bean的自动装配 6、注解开发 7、代理模式 8、AOP 能学到什么:详细了解Spring基础以及使用 阅读建议: 建议配合...

    Spring技术内幕学习笔记.docx

    《Spring技术内幕》学习笔记1——IoC容器体系结构 ...《Spring技术内幕》学习笔记5——IoC容器的依赖注入 《Spring技术内幕》学习笔记6——IoC容器的高级特性 《Spring技术内幕》学习笔记7——AOP基础

    spring学习笔记(有代码有注解解释)

    内容概要:学习Spring的一些学习笔记,主要学习Spring 框架两大核心机制(IoC、AOP) 笔记大纲:阅读笔记可以学习了解一下内容 如何使用 IoC ;配置文件;IoC 底层原理;通过运行时类获取 bean;通过有参构造创建 ...

    我的Pro Spring 学习笔记 之二 控制反转(IoC)和依赖注入(DI), Spring初步

    源代码 博文链接:https://danielkwo.iteye.com/blog/40945

    spring课堂笔记.docx

    "spring课堂笔记.docx" 是一份关于 Spring 框架的课堂笔记,它提供了对 Spring 框架的深入理解和学习资源。以下是对这份课堂笔记的大致描述: "spring课堂笔记.docx" 是一份详尽的学习材料,旨在帮助开发者掌握 ...

    Spring 学习笔记

    我的Spring 学习笔记,仅供参照 Spring依赖注入(DI)的三种方式,分别为: 1. 接口注入 2. Setter方法注入 3. 构造方法注入

    Spring.NET学习笔记

    Spring.NET学习笔记:资源有源代码程序及文档说明,基础篇、应用篇、扩展集成、企业架构体系实战等;基础篇包括:控制反转,环境搭建,实现简易IOC框架,对象的创建,容器中对象作用域,依赖注入,依赖对象的注入,...

    spring项目开发学习笔记

    依赖注入DI/IoC控制反转:提供松耦合的一种实现技术 AOP面向切面编程:(可以在不修改源代码的前提下,增强权限,日志,事务功能)切面编程将业务逻辑从应用服务中分离 容器(spring):管理dao,service,action,...包含并...

    Spring_IoC入门笔记.md

    依赖关系的维护:就称之为依赖注入 依赖注入: 注入方式:有三种 第一种:使用构造函数提供(创建对象时,必须提供数据,否则无法创建成功) 使用的标签:constructor-arg 标签出现的位置:bean标签的内部 标签...

    spring学习笔记

    spring中基本知识介绍,面向切面编程,依赖注入,控制翻转等。

    Spring.NET学习笔记-控制反转

    控制反转(Inversion of Control,英文缩写为IoC),也叫依赖注入(Dependency Injection)。我个人认为控制反转的意思是依赖对象(控制权)发生转变,由最初的类本身来管理依赖对象转变为IoC框架来管理这些对象,使得...

    play-java-spring:具有Spring依赖项注入的Play框架

    但是要使Play 2.4与Spring依赖注入配合使用是很难完成的,尤其是与2.3相比,在后者中只需几行代码就可以使其运行。 因此,与其让它变得更简单,不如让它变得更加困难,并从根本上强制使用Google Guice作为去污剂...

Global site tag (gtag.js) - Google Analytics