`

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的依赖注入机制是其核心特性之一,它极大地提升了代码的可测试性和可维护性。通过对依赖的解耦,开发者可以更专注于业务逻辑,而不是对象的创建和管理。在实际项目中,结合使用构造器和setter注入,...

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

    本篇学习笔记将深入剖析Spring依赖注入的原理,通过源码分析帮助我们理解这一核心机制。 首先,依赖注入允许我们解耦组件之间的关系,使得各个组件可以独立地进行开发、测试和维护。在Spring中,DI主要通过两种方式...

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

    在Spring框架的学习中,依赖注入(Dependency Injection,简称DI)是一个核心概念,它极大地提高了代码的可测试性和可维护性。本篇笔记将探讨Spring如何实现依赖注入,并通过实例进行详细解析。 首先,理解依赖注入...

    Spring学习笔记(精华全记录)

    ### Spring学习笔记(精华全记录) #### Spring框架概述 Spring框架源自Rod Johnson的个人项目,最初于2002年末发布。Spring并非一开始就作为一个完整的框架出现,而是从一个项目逐步发展而来。随着项目的成熟,...

    Spring学习笔记.zip

    依赖注入是Spring框架的核心特性之一,它允许开发者在运行时将对象及其依赖关系解耦。通过DI,组件不再直接创建它所依赖的对象,而是由容器负责创建和管理这些对象,并将它们注入到需要的地方。这有助于提高代码的可...

    Spring学习笔记+学习源码.zip

    这份"Spring学习笔记+学习源码.zip"资源包含了深入学习Spring及其相关技术的知识点,以及实践代码,对提升Spring技能将大有裨益。 首先,我们来详细讨论Spring框架的主要组件和功能: 1. **依赖注入(Dependency ...

    Spring学习笔记&源码

    本资料“Spring学习笔记&源码”是基于网易云课堂黑马程序员的Spring四天精通课程,旨在帮助学习者深入理解和实践Spring框架。 笔记部分可能会涵盖以下内容: 1. **Spring概述**:介绍Spring框架的历史、特点和主要...

    Spring框架学习笔记

    依赖注入是Spring的核心功能之一,它允许开发者在运行时动态地将依赖关系注入到对象中,而不是由对象自行创建或查找依赖。这样可以减少对象间的耦合,提高代码的可重用性和可测试性。 三、面向切面编程(AOP) ...

    spring指南学习笔记

    依赖注入是Spring框架的核心特性之一,它允许将依赖关系从组件内部的硬编码中解耦出来,由外部容器(如Spring IoC容器)在运行时自动管理和注入。这样做的好处是显著降低了组件之间的耦合度,使得组件更加独立,易于...

    Spring学习笔记.doc

    ### Spring学习笔记知识点详解 #### 一、Spring框架概述 **1.1 什么是Spring** Spring框架是一个开源的轻量级应用框架,主要用于简化企业级应用程序的开发过程。它的核心特性在于提供了一种灵活的方式来组织和...

    Spring学习笔记之二“属性注入”

    在本篇“Spring学习笔记之二‘属性注入’”中,我们将深入探讨Spring如何实现属性注入,并通过实例展示其工作原理。 1. **属性注入的概念** 属性注入是指Spring容器通过XML配置或者基于注解的方式,将外部资源(如...

    javaSpring学习笔记

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

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

    在本文中,我们将深入探讨Spring框架的核心概念——控制反转(Inversion of Control,IoC)和依赖注入(Dependency Injection,DI)。这些概念是Spring框架的基础,对于理解和掌握Spring的使用至关重要。 首先,让...

    spring学习笔记

    ### Spring学习笔记知识点详解 #### 一、Spring框架概述 **Spring** 是一个开源的、分层的企业级应用开发框架,旨在简化Java EE应用程序的开发。它的主要目标是提高开发效率,减少耦合度,并提供一种更为简洁的...

    Spring的学习笔记

    以下将详细介绍Spring学习笔记中的主要知识点。 **面向抽象编程** 面向抽象编程是一种设计原则,强调在代码中使用接口或抽象类,而不是具体实现类。这使得系统更具有灵活性,易于扩展和维护。在Spring框架中,我们...

    Spring 学习笔记 spring帮助文档

    在本篇Spring学习笔记中,我们将深入探讨Spring的基本概念,包括bean的配置、依赖注入、IOC容器以及Bean的实例化方式。 首先,Spring中的核心概念是bean。Bean是Spring框架中的基本构建块,它们是被管理的对象,...

    Spring学习笔记

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

    Spring学习笔记(8)----属性注入的方式

    本篇学习笔记主要探讨了Spring中的属性注入方式,包括了传统的XML配置注入、注解式注入以及使用Java配置类的方式。 一、XML配置注入 在Spring早期版本中,XML配置文件是定义Bean及其依赖关系的主要方式。属性注入...

Global site tag (gtag.js) - Google Analytics