Helloworld之Spring依赖注入/控制反转(DI/IoC)版

Helloworld之Spring依赖注入/控制反转(DI/IoC)版

作者:雨水, 日期:2014-10-29

摘要:本文主要用于培训初学者理解Spring中的依赖注入的基本概念. 先介绍依赖注入的基本概念,然后以构造器注入为例实现了Helloworld实例。

Spring依赖注入/控制反转

在我们通常的编程中,如果类A要依赖类B,通常是由A来创建一个B的实例。而Spring将创建B的实例的工作交给Spring容器来完成,然后注入A,因此称为依赖注入(DI, Dependency Injection)。这种创建被调用者的工作不再由调用者来完成,因此又称为控制反转(IoC, Inversion of Control)。

依赖注入将Bean以文件的形式组织在一起,降低了程序的耦合性。实例之间的依赖关系由IoC容器负责管理。

依赖注入Helloworld实例

依赖注入的方式有多种,比如构造器注入,设值注入等,这里以构造器注入为例。

第一步:搭建Spring环境

通过直接下载jar包加入工程或者通过Maven/Gradle来引入Spring的依赖jar包. 具体参考: http://spring.io/

第二步:编写具体类

1. 定义接口类MessageService.java

package cn.dennishucd;

public interface MessageService {
	public String getMessage();
}

2. 编写接口的实现类MessageServiceImpl.java

package cn.dennishucd;

public class MessageServiceImpl implements MessageService {
	@Override
	public String getMessage() {
		return "Hello World!";
	}
}

3. 编写服务消费类MessagePrinter.java

package cn.dennishucd;

public class MessagePrinter {
	final private MessageService service;

	public MessagePrinter(MessageService service) {
		this.service = service;
	}

	public void printMessage() {
		System.out.println(this.service.getMessage());
	}
}

4. 编写主程序类HelloworldSpring.java

package cn.dennishucd;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class HelloworldSpring {

	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext("helloworld.xml");
		MessagePrinter printer = (MessagePrinter) context.getBean("printer");

		printer.printMessage();

		((ClassPathXmlApplicationContext)context).close();
	}
}

第三步:编写spring配置文件

文件名可以任意,这里命名为helloworld.xml,该文件放在src的根目录下。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <bean id="service" class="cn.dennishucd.MessageServiceImpl"/>

    <bean id="printer" class="cn.dennishucd.MessagePrinter">
     <constructor-arg ref="service"/>
    </bean>
</beans>

第四步:运行程序

运行程序,显示:"Hello World!"

程序解释:

(1) MessagePrinter要使用MessageService获取消息的服务,它并不是直接在该类中new一个MessageService的具体实现类,而是提供一个注入接口,即这里的构造注入。

(2) 具体注入哪个MessageService的实现可以在spring的配置文件中进行配置,即通过<constructor-arg ref="service"/>来指定。并且这个具体实现类的实例化也由Spring的容器来实现。

(3) 这里只是一个hello的消息服务例子,想象一下如果是用做系统的数据访问服务。数据访问服务的消费者只需要定义一个接口并提供注入方式,具体使用什么样的数据访问实现就可以在配置文件中进行配置。如果系统需要更换数据访问实现,只需要修改配置文件中要注入的具体数据访问实现即可。这样实现了面向接口编程的松耦合。

(4) 主程序创建了一个Spring应用上下文,直接从应用上下文中获取到MessagePrinter消费者的实例,然后调用相应的方法。

参考资料:

1. http://spring.io/  Spring官网

1. http://www.cnblogs.com/linjiqin/archive/2013/11/04/3407126.html  Spring IOC容器基本原理

2. http://blog.csdn.net/a906998248/article/details/7514085  Spring 的核心机制:依赖注入(控制反转)

3. http://outofmemory.cn/code-snippet/3670/spring-inject-by-annotation  Spring依赖注入:注解注入总结

4. http://www.yiibai.com/spring/spring_hello_world_example.html  Spring Hello World 实例

时间: 2024-10-07 05:02:28

Helloworld之Spring依赖注入/控制反转(DI/IoC)版的相关文章

PHP关于依赖注入(控制反转)的解释和例子说明

PHP关于依赖注入(控制反转)的解释和例子说明 发表于2年前(2014-03-20 10:12)   阅读(726) | 评论(1) 8人收藏此文章, 我要收藏 赞2 阿里云双11绽放在即 1111 元红包即刻开抢!»   摘要 自从听到依赖注入这个设计模式,感觉很高大上,无奈楼主的眼光一直局限在国内框架上,也很少去关注设计模式方面的文章,直到某天遇到了laravel后,发现它手册里重点强调了一个名为“依赖注入”和“容器”的概念,但是对于这两个概念,手册里并未做基本的解释,所以楼主只能另外查找相

C#依赖注入控制反转IOC实现详解

原文:C#依赖注入控制反转IOC实现详解 IOC的基本概念是:不创建对象,但是描述创建它们的方式.在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务.容器负责将这些联系在一起. 举个例子,组件A中有类ClassA,组件B中有接口IB和其对应的实现类B1和B2. 那么,现在ClassA需要利用IB接口来做一些事情,例如: public class ClassA { public void DoSomething() { IB b = ??? b.DoWork(); }} 现

Spring 框架学习—控制反转(IOC)

    Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建. 简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架,主要用于降低模块之间耦合度的框 架,实际上Spring除了能够通过IoC降低模块之间的耦合度外还提供了其它功能. 1.IoC的基础知识以及原理: IoC理论的背景:在采用面向对象方法设计的软件系统中,底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终 实现

Spring学习3—控制反转(IOC)Spring依赖注入(DI)和控制反转(IOC)

一.思想理解 Spring 能有效地组织J2EE应用各层的对象.不管是控制层的Action对象,还是业务层的Service对象,还是持久层的DAO对象,都可在Spring的 管理下有机地协调.运行.Spring将各层的对象以松耦合的方式组织在一起,Action对象无须关心Service对象的具体实现,Service对 象无须关心持久层对象的具体实现,各层对象的调用完全面向接口.当系统需要重构时,代码的改写量将大大减少. 上面所说的一切都得宜于Spring的核心机制,依赖注入.依赖注入让bean与

Spring进阶之路(1)-Spring核心机制:依赖注入/控制反转

我们常常会遇到这样一种情景.就是在我们开发项目的时候常常会在一个类中调用其它的类中的方法,来完毕我们期望的任务.大部分的情况下往往会採用在当前需要的这个类里面new一个实例出来.然后调用他的方法,那么这种话会有个问题.就是有一天我想改变下这个类,改为其它的名称.那么这时候必需要做的是同一时候去调用方的类文件里改变这个改变的类的名称.这种情况是由于代码的耦合带来了后期维护成本的添加,那么spring的出现就能够非常好的起到解耦的作用,而他的核心机制就是依赖注入. 依赖注入与控制反转 依赖注入:对于

分层,工厂模式,依赖注入控制反转

1.分层:就如同一个人自己制造一个锤子,自己动手丰衣足食.你需要他就自己new一个该实例.无法实现二者之间的松耦合 2.工厂模式:一个人需要一个锤子,他找工厂,工厂帮他造了一个锤子.工厂给你制造的锤子,但是如何造的你不需要知道.你直接调用该接口就可以了,具体你不需要知道.调用者无须关心被调用者具体实现过程,只需要找到符合某种标准(接口)的实例,即可使用 3.依赖注入:一个人需要一个锤子,他打电话给卖锤子的叫他送货上门.你喜欢哪家的锤子,直接叫哪家送货上门就OK.用者无须自己定位工厂,程序运行到需

轻松了解Spring中的控制反转和依赖注入

我们回顾一下计算机的发展史,从最初第一台计算机的占地面积达170平方米,重达30吨,到现如今的个人笔记本,事物更加轻量功能却更加丰富,这是事物发展过程中的一个趋势,在技术领域中同样也是如此,企业级JavaBean(Enterprise JavaBean ,EJB)在创建之初是非常成功,但是时间一久人们便开始追逐更加方便更加简易和轻量级的技术框架实现,于是Spring就应运而生,并且Sring一直开始不断地涉及到其他领域(这里就不再多详谈了),而Spring的精髓当中就包括控制反转和依赖注入. 浅

轻松了解Spring中的控制反转和依赖注入(二)

紧接上一篇文章<轻松了解Spring中的控制反转和依赖注入>讲解了SpringIOC和DI的基本概念,这篇文章我们模拟一下SpringIOC的工作机制,使我们更加深刻的理解其中的工作. 类之间的结构图如下 以下是代码 BeanFactor接口:在Spring源码中的定义是:持有对一定数量的Bean的定义,同时每个Bean都被唯一标识的对象(类),需要实现这个接口.根据对Bean的定义,该工厂将会返回一个包含Bean定义的对象的独立实例(原型设计模式),或者单例共享(一个不错的单例设计模式,)范

spring IOC控制反转 DI注入

<!-- 初始化 init-method="init" 销毁destroy-method="destory" --> <!--懒加载 lazy-init="true" --> <bean id="IUDao" class="dao.IUDao" scope="singleton" init-method="init" destroy-me