Spring控制反转案例快速入门

1.下载Spring最新开发包

http://www.springsource.org/download/community 下载spring3.2 的开发包

目录结构(spring-framework-3.2.0.RELEASE)

* docs 存放API和 规范文档

* libs 开发jar包

* schemas 开发过程中需要导入xml的schema 约束

我们还有一个依赖包(spring-framework-3.0.2.RELEASE-dependencies),里面有开发涉及的所有jar包,以后开发可以从这里面找jar包。

2.复制Spring开发 jar包到工程

复制核心容器包含jar包 (beans、core、context、expression language)

spring 的 jar包 需要依赖 commons-logging的 jar (commons-logging 类似 slf4j 是通用日志组件,需要整合 log4j ),拷贝log4j.properties

* 提示:spring3.0.X 版本 asm jar包 已经被合并到 spring core包中

3.理解IoC控制反转和DI依赖注入

IoC Inverse of Control 反转控制的概念,就是将原本在程序中手动创建UserService对象的控制权,交由Spring框架管理,简单说,就是创建UserService对象控制权被反转到了Spring框架

DI:Dependency Injection 依赖注入,在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件

面试题: IoC 和 DI的区别?

IoC 控制反转,指将对象的创建权,反转到Spring容器 , DI 依赖注入,指Spring创建对象的过程中,将对象依赖属性通过配置进行注入

4.编写Spring核心配置文件

在src目录创建 applicationContext.xml

在docs\spring-framework-reference\html 找到 xsd-config.html,在最下方引入bean的约束

  1. <beansxmlns="http://www.springframework.org/schema/beans"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="
  4. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
编写配置文件applicationContext.xml
  1. <!-- 配置使用哪个实现类 对 IHelloService 进行实例化-->
  2. <!-- 配置实现类HelloServiceImpl,定义名称helloService-->
  3. <beanid="helloService"class="cn.itcast.spring.a_quickstart.HelloServiceImpl">
  4.         <!-- helloService 依赖 info属性 -->
    <!-- 通过property配置spring创建 helloService对象时,自动调用 setInfo方法 完成属性注入 -->
    <property name="info" value="传智播客"></property>
  5. </bean>
 

5.在程序中读取Spring配置文件,通过Spring框架获得Bean,完成相应操作

加载classpath(src): new ClassPathXmlApplicationContext("applicationContext.xml");

加载磁盘路径:new FileSystemXmlApplicationContext("applicationContext.xml");

  1. publicstaticvoid main(String[] args){
  2.     // 传统写法 (紧密耦合)
  3. HelloServiceImpl helloService =newHelloServiceImpl();
  4.     // 手动调用 set 方法为 info 进行赋值
    helloService.setInfo("spring");
  5. helloService.sayHello();
  6. // 工厂+反射 +配置文件 ,实例化 IHelloService的对象
  7. ApplicationContext applicationContext =newClassPathXmlApplicationContext("applicationContext.xml");
  8. // 通过工厂根据配置名称获得实例对象
  9. IHelloService iHelloService2 =(IHelloService) applicationContext.getBean("helloService");
  10. iHelloService2.sayHello();
  11. // 控制反转,对象的创建权被反转到 Spring框架
  12. }
 
说明:
    IHelloService接口定义:
  1. // 接口
  2. publicinterfaceIHelloService{
  3. publicvoid sayHello();
  4. }
    HelloServiceImpl实现类定义:
  1. // 实现类
  2. publicclassHelloServiceImplimplementsIHelloService{
  3.     private String info;
  4. publicvoid sayHello(){
  5. System.out.println("hello,"+info);
  6. }
  7.     // HelloServiceImpl 的实例 依赖 String 类型 info 数据
    // UML OOD设计中 依赖强调 方法中参数
    public void setInfo(String info) {
    this.info = info;
    }
  8. }
 
 

02_Spring控制反转案例快速入门的更多相关文章

  1. Spring IOC - 控制反转(依赖注入) - 入门案例 - 获取对象的方式 - 别名标签

    1. IOC - 控制反转(依赖注入) 所谓的IOC称之为控制反转,简单来说就是将对象的创建的权利及对象的生命周期的管理过程交 由Spring框架来处理,从此在开发过程中不再需要关注对象的创建和生命周 ...

  2. 通过angularJS官方案例快速入门

    官方案例-angular-phonecat angularJS官方提供了一个官方案例给大家进行循序渐进的学习,但是如果之前没有接触过node.js以及git的同学这个案例拿着也无从下手-这里就介绍一下 ...

  3. Spring IoC反转控制的快速入门

    * 下载Spring最新开发包 * 复制Spring开发jar包到工程 * 理解IoC反转控制和DI依赖注入 * 编写Spring核心配置文件 * 在程序中读取Spring配置文件,通过Spring框 ...

  4. 大数据技术之_09_Flume学习_Flume概述+Flume快速入门+Flume企业开发案例+Flume监控之Ganglia+Flume高级之自定义MySQLSource+Flume企业真实面试题(重点)

    第1章 Flume概述1.1 Flume定义1.2 Flume组成架构1.2.1 Agent1.2.2 Source1.2.3 Channel1.2.4 Sink1.2.5 Event1.3 Flum ...

  5. Elasticsearch快速入门案例

    写在前面的话:读书破万卷,编码如有神-------------------------------------------------------------------- 参考内容: <Ela ...

  6. Part1-HttpClient快速入门案例

    前言 最近这段时间在学习爬虫方面的知识,接触了几个优秀的爬虫框架,也爬取了一些自己喜欢网站的信息.通过官网学习HttpClient的过程中,希望通过写此博客来巩固自己的学习,也为有需要的人提供学习帮助 ...

  7. 控制反转和依赖注入(对IOC,DI理解+案例)

    理解 控制反转说的官方一点就是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度.其实就是一种设计思想,大概思想就是把设计好的对象交给容器控制,而不是在你内部直接控制. 依赖注入是控制反 ...

  8. 依赖注入 DI 控制反转 IOC 概念 案例 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  9. [易学易懂系列|rustlang语言|零基础|快速入门|(9)|Control Flows流程控制]

    [易学易懂系列|rustlang语言|零基础|快速入门|(9)] 有意思的基础知识 Control Flows 我们今天再来看看流程控制. 条件控制 if-else if -else: / Simpl ...

随机推荐

  1. UINavigationController详解一(转)UIBarButtonItem

    本文出自:http://www.cnblogs.com/smileEvday/archive/2012/05/14/2495153.html 特别感谢. 1.UINavigationControlle ...

  2. android 项目学习随笔二十一(IM、语音识别、机器人、统计、扫描二维码、条形码)

    语音识别:科大讯飞语音云 http://www.xfyun.cn/ 语音机器人模拟 public class TalkBean { public String text; public boolean ...

  3. [翻译] 使用ASP.NET MVC操作过滤器记录日志

    [翻译] 使用ASP.NET MVC操作过滤器记录日志 原文地址:http://www.singingeels.com/Articles/Logging_with_ASPNET_MVC_Action_ ...

  4. 介绍“Razor”— ASP.NET的一个新视图引擎

    我的团队当前正在从事的工作之一就是为ASP.NET添加一个新的视图引擎. 一直以来,ASP.NET MVC都支持 “视图引擎”的概念—采用不同语法的模板的可插拔模块.当前ASP.NET MVC “默认 ...

  5. windows prompt personalize 设置cmd提示的相关

    由于有一篇随笔种我说要引用这篇文章,所以不得已也出来了,就像你说大话『我明天去吃屎』,结果你做到了. 我这记录一下有关windows prompt这是的变量,我不知道这算不算变量,因为windows变 ...

  6. linux内核栈用户栈切换【转】

    转自:http://www.kerneltravel.net/kernel-book/%E7%AC%AC%E5%9B%9B%E7%AB%A0%20%E8%BF%9B%E7%A8%8B%E6%8F%8F ...

  7. 图解 交集(join)和 合并(union)

    假设我们有两张表. Table A 是左边的表. Table B 是右边的表. 其各有四条记录,其中有两条记录是相同的,如下所示: id name       id  name 1  Pirate   ...

  8. Mysql服务器相互作用的通讯协议包括TCP/IP,Socket,共享内存,命名管道

    MySQL实现了四种通信协议 TCP/IP协议,通常我们通过来连接MySQL,各种主要编程语言都是根据这个协议实现了连接模块 Unix Socket协议,这个通常我们登入MySQL服务器中使用这个协议 ...

  9. $(document).ready vs $(window).load vs window.onload

    原文地址: $(document).ready vs $(window).load vs window.onload $(document).ready We execute our code whe ...

  10. oracle 存储过程发邮件

    CREATE OR REPLACE PROCEDURE PROCSENDEMAIL(P_TXT       VARCHAR2,                                      ...