Spring笔记:IOC基础

引入IOC

    在Java基础中,我们往往使用常见关键字来完成服务对象的创建。举个例子我们有很多U盘,有金士顿的(KingstonUSBDisk)的、闪迪的(SanUSBDisk),或者其他满足U盘接口的(USBDisk)。

    如果我们用new方法,那么就意味着我们的接口只能用于某种特定品牌的U盘。  

USBDisk usbdisk = new KingstonUSBDisk();

    通过上述操作,USBDisk与KingstonUSBDick就形成了耦合。换句话说,如果想用闪迪的U盘就需要修改源码才可以。如果未来又更先进的U盘,那就要修改源码了,大型系统的资源多达成百上千,如果都采用这样的方式,系统就会形成严重的耦合,不利于维护和扩展

    这时候IOC的理念来了,首先它不是一种技术,而是一种理念。假设我们不采用new方法,而是使用一种描述的方式,每一个U盘都有一段自己的描述,通过接口我们可以读入这些信息,根据这些信息注入对应的U盘,这样我们在维护源码的时候只需要去描述这些信息并提供对应的服务即可,不需要去改动源码了。

    仍然以U盘为例,如果用的是闪迪U盘,那么在信息描述段给出的就是闪迪U盘,系统会根据这个信息去匹配对应的实现类,而无需用new方法区生产实现类。同样,如果用的是金士顿U盘,那么在信息描述段给出的就是金士顿,系统也会自动生产对应的服务注入到我们的系统中,而我们只需要通过描述就可以获得资源,无需自己用new方法区创景资源和服务

IOC注入方式

    通过上述我们得知,Spring注入资源往往是通过描述来实现的,在Spring中往往是注解或者是XML描述,Spring中的IOC注入方式分为下面几种。

构造器注入

  构造方法注入是依靠类的构造去实现的,对于一些参数较少的对象可以使用这个方式注入。比如角色类(Role),它的构造方法中包含三个属性:编号(Id)、角色名称(RoleName)、备注(Note)。

  

  这样我们就描述了一个Role,它可以注入到其他资源中,但是如果构造方多,显然不是一个很好的方法,而Spring更加推荐使用setter注入。

Setter注入

  假设上面角色类中还有一个没有参数的构造方法,它的三个属性都有setter方法,那么我们就可以使用setter注入。

   

  使用setter注入更加灵活,因为使用构造方法,会疏导构造方法的参数个数、顺序这些因素干扰。侵入更加少,所以这是Spring首选的注入方式

接口注入

  Spring接口注入方式。它是一种注入其他服务的接口,比如JNDI数据源的注入,在Tomcat或者其他的服务器中往往配置了JNDI数据源,那么就可以使用接口注入我们需要的资源。

  

  它允许你从一个远程服务中注入一些服务到本地调用。

  

Spring笔记:IOC基础的更多相关文章

  1. Spring 学习笔记 IoC 基础

    Spring IoC Ioc 是什么 IoC -- Inversion of Control(控制反转)什么是控制?什么是反转? 控制反转了什么? 在很早之前写项目不用 Spring 的时候,都是在 ...

  2. Spring操作指南-IoC基础环境配置(基于注解自动装配)

    项目源码:http://code.taobao.org/p/LearningJavaEE/src/LearningSpring001%20-%20Automatically%20wiring%20be ...

  3. Spring操作指南-IoC基础环境配置(基于注解手动装配)

    Source: http://code.taobao.org/p/LearningJavaEE/src/LearningSpring002%20-%20Wiring%20beans%20with%20 ...

  4. Spring操作指南-IoC基础环境配置(基于XML)

  5. [跟我学spring学习笔记][IoC]

    IoC基础 什么是IoC Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想. ioc做什么 IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找 ...

  6. spring揭密学习笔记(3)-spring ioc容器:Spring的IoC容器之BeanFactory

    1. Spring的IoC容器和IoC Service Provider的关系 Spring的IoC容器和IoC Service Provider所提供的服务之间存在一定的交集,二者的关系如图4-1所 ...

  7. spring揭秘读书笔记----spring的ioc容器之BeanFactory

    spring的ioc容器是一种特殊的Ioc Service Provider(ioc服务提供者),如果把普通的ioc容器认为是工厂模式(其实很相似),那spring的ioc容器只是让这个工厂的功能更强 ...

  8. Spring笔记:AOP基础

    Spring笔记:AOP基础 AOP 引入AOP 面向对象的开发过程中,我们对软件开发进行抽象.分割成各个模块或对象.例如,我们对API抽象成三个模块,Controller.Service.Comma ...

  9. Spring入门IOC和AOP学习笔记

    Spring入门IOC和AOP学习笔记 概述 Spring框架的核心有两个: Spring容器作为超级大工厂,负责管理.创建所有的Java对象,这些Java对象被称为Bean. Spring容器管理容 ...

随机推荐

  1. Python类定义和类继承详解

    类实例化后,可以使用其属性,实际上,创建一个实例之后,可以通过类名访问其属性,如果直接使用类名修改其属性,那么直接影响已经实例化的对象. 类的私有属性: __private_attrs 两个下划线开头 ...

  2. Windows操作系统设置代理

    1.打开控制面板 2.点击网络和Internet 3.点击Internet选项 4.点击连接Tab页 5.点击局域网设置 6.选中代理服务器 7.输入代理的地址和端口号

  3. smali文件内容具体介绍

    大家都应该知道APK文件其实就是一个MIME为ZIP的压缩包,我们修改ZIP后缀名方式可以看到内部的文件结构,例如修改后缀后用RAR打开鳄鱼小顽皮APK能看到的是(Google Play下载的完整版版 ...

  4. IIS5.1、IIS6.0、IIS7.5中安装配置MVC 3

    本文主要介绍在IIS5.1.IIS6.0.IIS7.5中安装配置MVC 3的具体办法! 正文: IIS5.1 1. 安装Microsoft .net FrameWork 4.0安装包; 2. 安装AS ...

  5. angularjs2中的父子组件通信

    父组件模板中引用子组件 // father template: ... <child-item [name] = "fatherItemName" > </chi ...

  6. Unity3d 实现鼠标左键点击地形使角色移动到指定地点[脚本]

    Unity3d 实现鼠标左键点击地形使角色移动到指定地点[脚本] 2013-02-19 15:29:33     我来说两句      作者:nnsword 收藏    我要投稿 其中涉及,移动速度, ...

  7. Log4J 基本使用

    Log4j由三个重要的组件 构 成:日志 信息 的优先级,日志信息的输出目的地,日志信息的输出格式. 日志信息的优先级 从高到低有ERROR . WARN . INFO . DEBUG ,分别用来指定 ...

  8. 《HBase in Action》 第三章节的学习总结 ---- 如何编写和运行基于HBase的MapReduce程序

    HBase之所以与Hadoop是最好的伙伴,我理解就因为两点:1.HADOOP的HDFS,为HBase提供了分布式的存储方式:2.HADOOP的MR为HBase提供的分布式的计算方法.u 其中第一点, ...

  9. Google Code Jam 2014 资格赛:Problem D. Deceitful War

    This problem is the hardest problem to understand in this round. If you are new to Code Jam, you sho ...

  10. 【Python+selenium Wendriver API】之操作警告和弹出框

    参考文章: <Python+Selenium笔记(九):操作警告和弹出框>