- 浏览: 60357 次
- 性别:
- 来自: 应县
最新评论
-
fc19861011:
请问你解决了吗?poi修改word中生成的图表数据找了好久没发 ...
jacob 怎么改变 word图表的数据呢? -
longgol:
GridPanel中mouseover事件获取列index
...
GridPanel中mouseover事件获取行index
IoC(Inversion of Control)控制反转的具体表现为以下几点:
高层模块不应该依赖底层模块,而是模块都必须依赖于抽象。
实现必须依赖抽象,而不是抽象依赖实现。
如果高层模块直接执行底层模块的函数,就对底层模块产生了依赖关系。
在设计上希望模块都依赖与模块的抽象,这样才可以重用高层的应用程序设计。
public class Business{
private FloppyWriter writer = new FloppyWriter();
...
public void save(){
...
writer.saveToFloppy();
}
}
Business类的设计中,存盘的需求依赖于实际的FloppyWriter对象,如果今天想要将存储介质换为USB磁盘,则必须修改Business的程序,您无法直接重复使用Business类。
如果透过接口的声明,可以改进这种情况,例如可先定义一个IDeviceWriter接口:
public interface IDeviceWriter{
public void saveToDevice();
}
接着所设计的Business类,在遇到存盘需求时,可以设计为依赖与IDevice接口,而不是依赖于实际的FloppyWriter,例如:
public class Business{
private IDeviceWriter writer;
public void setDeviceWriter(IDeviceWriter writer){
this.writer = writer;
}
public void save(){
...
writer.saveToDevice();
}
}
在这样的设计下,Business类就是可以重用的,如果今天有存储至Floppy或USB磁盘的需求,只要针对这两种储存需求分别实现接口即可,例如针对Floppy存储设计一个FloppyWriter类:
public class FloppyWriter implements IDeviceWriter{
public void saveToDevice(){
...
//实际存储至Floppy的程序代码
}
}
或是针对USB磁盘存储设计一个UsbDiskWriter类:
public class UsbDiskWriter implements IDeviceWriter{
public void saveToDevice(){
...
//实际存储至UsbDisk的程序代码
}
如果应用程序需要Floppy存储的话,可以编写一个配置程序如下:
Business business = new Business();
business.setDeviceWriter(new FloppyWriter());
business.save();
同样的,如果应用程序需要USB磁盘的话,可以编写一个配置程序如下:
Business business = new Business();
business.setDeviceWriter(new UsbDiskWriter());
business.save();
IoC要求的是容器不应该(或尽量不要)侵入应用程序,也就是不应该出现与容器相依的API,应用程序本身可以依赖于抽象的接口,容器可以透过这些抽象接口将所需的资源注入至应用程序中,应用程序不向容器主动要求资源,故而不会依赖于容器的特定API,应用程序本身不会意识到正被容器使用,可以随时从容器系统中脱离,转移至其他的容器或框架而不用作任何的修改。
IoC模式基本上是一个高层的模式概念,在Martin Fowler的Inversion of Control Containers and the Dependency Injection pattern中谈到,实现IoC有两种方式:Dependency Injection 与Service Locator,Spring所采用的是Dependency Injection来实现IoC,中文翻译为依赖注入。
Spring的核心是个IoC容器,可以用Setter或构造函数的方式来实现您的应用程序对象,至于对象与独享之间的关系建立,则可以透过配置文件设定(一个XML文件或是一个.properies文件),让Spring在执行时期根据配置文件的设定,为您建立对象之间的依赖关系,您不必特地编写一些程序来自行建立这些对象之间的依赖关系,这不仅减少大量的程序编写,也降低了对象之间的耦合程度。
高层模块不应该依赖底层模块,而是模块都必须依赖于抽象。
实现必须依赖抽象,而不是抽象依赖实现。
如果高层模块直接执行底层模块的函数,就对底层模块产生了依赖关系。
在设计上希望模块都依赖与模块的抽象,这样才可以重用高层的应用程序设计。
public class Business{
private FloppyWriter writer = new FloppyWriter();
...
public void save(){
...
writer.saveToFloppy();
}
}
Business类的设计中,存盘的需求依赖于实际的FloppyWriter对象,如果今天想要将存储介质换为USB磁盘,则必须修改Business的程序,您无法直接重复使用Business类。
如果透过接口的声明,可以改进这种情况,例如可先定义一个IDeviceWriter接口:
public interface IDeviceWriter{
public void saveToDevice();
}
接着所设计的Business类,在遇到存盘需求时,可以设计为依赖与IDevice接口,而不是依赖于实际的FloppyWriter,例如:
public class Business{
private IDeviceWriter writer;
public void setDeviceWriter(IDeviceWriter writer){
this.writer = writer;
}
public void save(){
...
writer.saveToDevice();
}
}
在这样的设计下,Business类就是可以重用的,如果今天有存储至Floppy或USB磁盘的需求,只要针对这两种储存需求分别实现接口即可,例如针对Floppy存储设计一个FloppyWriter类:
public class FloppyWriter implements IDeviceWriter{
public void saveToDevice(){
...
//实际存储至Floppy的程序代码
}
}
或是针对USB磁盘存储设计一个UsbDiskWriter类:
public class UsbDiskWriter implements IDeviceWriter{
public void saveToDevice(){
...
//实际存储至UsbDisk的程序代码
}
如果应用程序需要Floppy存储的话,可以编写一个配置程序如下:
Business business = new Business();
business.setDeviceWriter(new FloppyWriter());
business.save();
同样的,如果应用程序需要USB磁盘的话,可以编写一个配置程序如下:
Business business = new Business();
business.setDeviceWriter(new UsbDiskWriter());
business.save();
IoC要求的是容器不应该(或尽量不要)侵入应用程序,也就是不应该出现与容器相依的API,应用程序本身可以依赖于抽象的接口,容器可以透过这些抽象接口将所需的资源注入至应用程序中,应用程序不向容器主动要求资源,故而不会依赖于容器的特定API,应用程序本身不会意识到正被容器使用,可以随时从容器系统中脱离,转移至其他的容器或框架而不用作任何的修改。
IoC模式基本上是一个高层的模式概念,在Martin Fowler的Inversion of Control Containers and the Dependency Injection pattern中谈到,实现IoC有两种方式:Dependency Injection 与Service Locator,Spring所采用的是Dependency Injection来实现IoC,中文翻译为依赖注入。
Spring的核心是个IoC容器,可以用Setter或构造函数的方式来实现您的应用程序对象,至于对象与独享之间的关系建立,则可以透过配置文件设定(一个XML文件或是一个.properies文件),让Spring在执行时期根据配置文件的设定,为您建立对象之间的依赖关系,您不必特地编写一些程序来自行建立这些对象之间的依赖关系,这不仅减少大量的程序编写,也降低了对象之间的耦合程度。
发表评论
-
Tomcat集群与负载均衡
2011-01-26 16:00 589在单一的服务器上执行W ... -
xalan-2.7.0.jar下载地址
2011-01-26 15:59 3178xalan-2.7.0.jar下载地址:http://svn. ... -
provider org.apache.xalan.processor.TransformerFactoryImpl not found
2011-01-26 15:58 944完整的Exception: Exception startin ... -
Apache与Tomcat整合的简单方法
2011-01-26 15:57 6761、准备,下载需要的文件。这里假定你已经正确安装配置好了JDK ... -
(转)Tomcat源码学习(一)
2011-01-26 15:57 593Tomcat源码学习(一) http://carllgc.bl ... -
Tomat源码学习(二) [图片]
2011-01-26 15:55 712Tomat源码学习(二) Tomat6的整体架构 在上篇文 ... -
Tomat6架构探讨(续)
2011-01-26 15:54 701Tomat源码学习(二) 下面,我们重点针对Catalin ... -
JNDI
2011-01-26 15:49 694Java术语 英文全称是:Java ... -
JSP内建对象- - 转
2011-01-26 15:48 555① out - javax.servlet.jsp.jspWr ... -
全面理解String(JAVA复习)- -
2011-01-26 15:48 5841. 首先String不属 ... -
初学者如何开发出高质量的J2EE系统 (转载)
2011-01-26 15:47 697J2EE学习者越来越多,J2E ... -
关于JSP中的taglib uri
2011-01-26 15:47 1009自定义标签在jsp中应用是需要声明标签库,有下面两种方式: 1 ... -
context-param和init-param区别
2011-01-26 15:46 443web.xml里面可以定义两种参数: (1)applicati ... -
javax.servlet.Filter运用
2011-01-26 15:46 687Servlets Filter 是Servlet 2.3 规范 ... -
javax.servlet.FilterChain
2011-01-26 15:45 961javax.servlet Interface Filter ... -
引用 五个有用的过滤器 Filter
2011-01-26 15:45 620引用 xyz 的 五个有用的过滤器 Filter 来源:htt ... -
spring:简单的属性参考
2011-01-26 15:43 549在定义文件(XML配置文件)中定义Bean时,可以直接指定一个 ... -
学习Spring前必须了解的几点【资料搜集】
2011-01-26 15:42 845轻量级(Lightweight) 轻量级的形容是相对于 ... -
struts2:主题: Interceptor在Struts2中的应用... [图片]
2011-01-26 15:41 664Interceptor(拦截器)将Action共用的行为独立出 ... -
struts2配置文件介绍
2011-01-26 15:40 634一、Struts2配置文件 Struts2相关的配置文件有w ...
相关推荐
Inversion of Control Containers and the Dependency Injection pattern(中文版)
Event-Based Programming without Inversion of Control-jmlc06.pdf
控制反轉(Inversion of Control),是近來較為新興的系統開發模式,它的特性可使架構顯得更為鬆散,更驅進OO的核心思維。
Chapter 2: Inversion Of Control In Spring Chapter 3: Dao And Jdbc In Spring Chapter 4: Hibernate With Spring Chapter 5: Spring Web Mvc Framework Chapter 6: Spring Security Chapter 7: Spring Testing ...
Inversion of control with Spring
NULL 博文链接:https://moshalanye.iteye.com/blog/840421
This book is an introduction to the well-known Spring Framework that offers an inversion of control container for the Java platform. The Spring Framework is an open source application framework that ...
inversion of control dependency injection AOP的概念与好处 Spring简介 Spring应用IOC/DI(重要) xml annotation Spring应用AOP(重要) xml annotation Struts2.1.6 + Spring2.5.6 + Hibernate3.3.2整合(重要)...
它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制...
它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制...
IOC,Inversion of Control,控制反转 AOP(Aspect-OrientedProgramming),面向切面编程 Spring AOP里面常用名词的概念: Spring容器的启动流程 Spring Bean的生命周期? Spring中bean的作用域 说一下Spring基于xml...
它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制...
3.spring-beans:基础jar包,它包含访问配置文件、创建和管理bean 以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI 支持,引入spring-core.jar 及spring...
What Inversion of Control (IoC) and dependency injection (DI) are Aspect-oriented programming techniques with Spring, and why they’re important Data access and persistence using Spring and Hibernate,...
其中最重要的是Spring框架的控制反转(Inversion of Control,IoC)容器(container)。在对Spring框架的IoC容器进行全面介绍之后,将全面介绍Spring的面向切面编程(AOP)技术。Spring框架(Spring Framework)有...
引入Ioc: Inversion of Control 中文名即控制反转,这是一种设计思想,有点类似于设计模式,并不是一门具体的技术。其核心为将你设计好的对象由
其中最重要的是Spring框架的控制反转(Inversion of Control,IoC)容器(container)。在对Spring框架的IoC容器进行全面介绍之后,将全面介绍Spring的面向切面编程(AOP)技术。Spring框架(Spring Framework)有...
其中最重要的是Spring框架的控制反转(Inversion of Control,IoC)容器(container)。在对Spring框架的IoC容器进行全面介绍之后,将全面介绍Spring的面向切面编程(AOP)技术。Spring框架(Spring Framework)有...
其中最重要的是Spring框架的控制反转(Inversion of Control,IoC)容器(container)。在对Spring框架的IoC容器进行全面介绍之后,将全面介绍Spring的面向切面编程(AOP)技术。Spring框架(Spring Framework)有...