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. JavaScript target与currentTarget区别

    1.DOM事件绑定到父元素 <!DOCTYPE html> <html lang="zh"> <head> <meta charset=& ...

  2. Ubuntu 开机引导文件 /etc/default/grub

    # If you change this file, run 'update-grub' afterwards to update # /boot/grub/grub.cfg. GRUB_DEFAUL ...

  3. HttpClient简介

    栏目:Web开发 作者:admin 日期:2015-05-02 评论:0 点击: 204 次   虽然在JDK的java net包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说 ...

  4. 创建标题栏,UINavigationBar的使用

    IOS 开发有关界面的东西不仅可以使用代码来编写,也可以使用Interface Builder可视化工具来编写.今天有个朋友问我这两个有什么区别,首先说说IB ,使用它编辑出来的控件其实底层还是调用代 ...

  5. MongoDB查询条件常用设置

    原文地址:http://blog.csdn.net/mcpang/article/details/8731065 Java操作mongodb进行查询,常用筛选条件的设置如下: 条件列表: BasicD ...

  6. 自动化测试 python2.7 与 selenium 2 学习

    windows环境搭建 # 下载 python[python 开发环境] http://python.org/getit/ # 下载 setuptools [python 的基础包工具]setupto ...

  7. javascript与as3交互

    文章都是发布在github再转到这边的,这边格式可能会乱掉.博客地址:benqy.com 写在前面的废话 公司首页的flash广告,都是由第三方制作的,脚本和flash文件都是由各个广告公司独立制作, ...

  8. Junit内部解密之四: Junit单元测试最佳实践

    我们做使用Junit工具来做单页测试或接口测试时,需要注意一些问题,包括我们的编码规范,test规范,以及编写测试代码的策略,以下个人的总结. 1.为还没有实现的测试代码抛出一个异常.这就避免了该测试 ...

  9. 利用SQL server 的复制功能分散用户访问服务器的负载

    先来了解一下一个基本的关于复制的概念. 什么是复制? 复制就是把数据的多个拷贝(复制品)分发到公司中的各个服务器中,通过复制为多台服务器提供相同的数据.这样用户就可以在不同服务器中访问同样的信息. 对 ...

  10. Call to static DateFormat

    Bug: Call to method of static java.text.DateFormatPattern id: STCAL_INVOKE_ON_STATIC_DATE_FORMAT_INS ...