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. 【HTML5】元素<script>与<noscript>的使用

    功能描述 在新建的页面中增加一个文本框"txtContent"和一个按钮"请点击我":当单击按钮时.通过页面中加入的JavaScript脚本获取为文本框中的内容 ...

  2. 2010年imac从移动硬盘启动Win10

    虽然是个程序员,但也爱折腾. 原WIN10不想折腾,虚拟机折腾大点的软件太卡,不能完全发挥硬件水平. 原材料(硬件):2010年imac一台,80G移动硬盘一块(个人组装,硬盘盒+3.5寸IDE硬盘) ...

  3. &lt;LeetCode OJ&gt; 155. Min Stack

    Design a stack that supports push, pop, top, and retrieving the minimum element in constant time. pu ...

  4. cadence allegro pcb模块设计复用

    cadence allegro pcb模块设计复用 转载▼ 标签: 复用 模块 原理图 元件 文件 杂谈 分类: PCB技术 在你遇到如上图所示的dsp阵列PCB时,如果你的layout软件支持模块复 ...

  5. Newtonsoft.Json之JArray, JObject, JProperty,JValue

    JObject staff = new JObject(); staff.Add(new JProperty("Name", "Jack")); staff.A ...

  6. jsp页面用java代码取随机数

    <%int seconds = (int) (System.currentTimeMillis() / 1000); %> 然后在需要随机数的地方加上下面的代码: <input na ...

  7. Proftp设置虚拟用户(转)

    首先在proftpd.conf中添加:        AuthOrder mod_auth_file.c mod_auth_unix.c AuthUserFile /usr/local/etc/ftp ...

  8. 为php添加pcntl扩展,多线程

    前言: pcntl 介绍 pcntl扩展可以支持 PHP 的多线程操作.(非Unix类系统不支持此模块) phpize 介绍 phpize 可以用来给 PHP 动态的添加扩展.比如编译 PHP 时忘记 ...

  9. HDU 4883 TIANKENG’s restaurant Bestcoder 2-1(模拟)

    TIANKENG's restaurant Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/O ...

  10. memcache原理和实际应用

    Memcache是什么 Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的.眼下全世界不少人使用这个缓存项目来构建自己大负载的站点,来分担数据库的压力. 它能够应 ...