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包增加project或者通过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 {@Overridepublic 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.xsdhttp://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 实例

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

  1. laravel5.2总结--服务容器(依赖注入,控制反转)

    1.依赖 我们定义两个类:class Supperman 和 class Power,现在我们要使用Supperman ,而Supperman 依赖了Power class Supperman { p ...

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

    一.思想理解    Spring 能有效地组织J2EE应用各层的对象.不管是控制层的Action对象,还是业务层的Service对象,还是持久层的DAO对象,都可在Spring的 管理下有机地协调.运 ...

  3. 【IOC 控制反转】IOC 简介 ( 依赖注入的两种实现方式 | 编译期注入 | 运行期注入 )

    文章目录 一.IOC 简介 二.依赖注入的两种实现方式 一.IOC 简介 IOC 是 Inversion Of Control 的缩写 , 控制反转 ; 其最主要的作用是 降低代码的耦合度 , 最常见 ...

  4. Spring的控制反转(IOC)和依赖注入(DI)具体解释

    Spring的控制反转(IOC)和依赖注入(DI)具体解释 首先介绍下(IOC)控制反转: 所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的.这样控制器就有应 ...

  5. 为什么要使用Spring,为什么要使用控制反转(IOC)和依赖注入(DI),为什么要使用AOP

    为什么要使用Spring,为什么要使用控制反转(IOC)和依赖注入(DI),为什么要使用AOP Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod ...

  6. Spring容器,控制反转,依赖注入

    Spring boot学习之旅,为更好督促自己学习以记之,仅供参考. spring容器 程序启动的时候会创建spring容器,扫描给spring容器一个清单,比如:@Controller, @Bean ...

  7. Spring : 依赖注入(IoC)控制反转

    1.美图 2.概述 依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色需要另外一个角色协助的时候,在传统的程序设 ...

  8. 大学生 从0开始学Spring第2篇:控制反转(IoC)与依赖注入【从0到精通】

    控制反转(IoC)与依赖注 **引出spring** 依赖关系 spring 容器 IOC:控制反转 DI:依赖注入 总结 Spring中有3个核心的概念: 控制反转(Ioc). 依赖注入(DI). ...

  9. Java:控制反转(IoC)与依赖注入(DI)

    很长一段时间里,我对控制反转和依赖注入这两个概念很模糊,闭上眼睛想一想,总有一种眩晕的感觉.但为了成为一名优秀的 Java 工程师,我花了一周的时间,彻底把它们搞清楚了. 01.紧耦合 在我们编码的过 ...

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

    点击上方 "程序员小乐"关注公众号, 星标或置顶一起成长 每天早上8点20分, 第一时间与你相约 每日英文 When you have something you really l ...

最新文章

  1. FSWD_3_JavaScriptAdvance
  2. 《PRML_Translation》pdf
  3. FilterDispatcher is deprecated! Please use
  4. 什么时候z检验什么时候t检验?
  5. debian apt-get联网安装mysql服务
  6. Spring boot项目集成Sharding Jdbc
  7. SpringBoot2.5.4发送邮件4种方式
  8. 替换jar包_替换代码的情况下不停机!这操作可能工作6年的Java程序员都不会
  9. Page.ClientScript.RegisterArrayDeclaration
  10. pandas rolling方法_【干货】pandas相关工具包
  11. [VNC] 云服务器 Ubuntu 18.04 安装 Xfce4 桌面并配置 VNC
  12. 蓝桥杯 ADV-203 算法提高 8皇后·改(八皇后问题)
  13. go mysql recover_Go基础系列:defer、panic和recover
  14. python中grid的用法_SVM中如何使用grid.py
  15. 模糊C均值聚类(FCM)算法概述
  16. python写入文件取消自动换行
  17. wps怎么生成html,wps如何自动生成页码 wps页码设置详细方法
  18. 想当程序员吗?这11所大学计算机专业堪称国内顶级,高考考生千万不要错过
  19. 8、content-scripts实现一个简单的去除广告插件
  20. CF Card Reader Test市面CF读卡器不完全测评

热门文章

  1. 异步处理老司机:IntentService 源码分析
  2. OpenGL ES总结(五)OpenGL 中pipeline机制
  3. SuperIndicator 专做轮播图库,没有之一,支持无限循环
  4. python基础知识——模块
  5. 本html添加可信站点,js实现添加可信站点、修改activex安全设置,禁用弹出窗口阻止程序...
  6. python爬虫异步加载图片_python爬虫程序 异步加载爬虫knewone.com实例
  7. java 读取 dto_DTO 实现 service 和 controller 之间值传递的操作
  8. 如何使用代码获取电脑内存_代码实战 | 如何在 Android 开发中使用协程
  9. python 加速方法_加速Python的几种方法
  10. 带存储功能的计算器是什么样的_19年中级会计考生能不能带计算器考试?今天统一回复!...