- 浏览: 63972 次
- 性别:
- 来自: 应县
-
最新评论
-
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 628在单一的服务器上执行W ... -
xalan-2.7.0.jar下载地址
2011-01-26 15:59 3243xalan-2.7.0.jar下载地址:http://svn. ... -
provider org.apache.xalan.processor.TransformerFactoryImpl not found
2011-01-26 15:58 1008完整的Exception: Exception startin ... -
Apache与Tomcat整合的简单方法
2011-01-26 15:57 7121、准备,下载需要的文件。这里假定你已经正确安装配置好了JDK ... -
(转)Tomcat源码学习(一)
2011-01-26 15:57 633Tomcat源码学习(一) http://carllgc.bl ... -
Tomat源码学习(二) [图片]
2011-01-26 15:55 765Tomat源码学习(二) Tomat6的整体架构 在上篇文 ... -
Tomat6架构探讨(续)
2011-01-26 15:54 753Tomat源码学习(二) 下面,我们重点针对Catalin ... -
JNDI
2011-01-26 15:49 758Java术语 英文全称是:Java ... -
JSP内建对象- - 转
2011-01-26 15:48 605① out - javax.servlet.jsp.jspWr ... -
全面理解String(JAVA复习)- -
2011-01-26 15:48 6251. 首先String不属 ... -
初学者如何开发出高质量的J2EE系统 (转载)
2011-01-26 15:47 741J2EE学习者越来越多,J2E ... -
关于JSP中的taglib uri
2011-01-26 15:47 1042自定义标签在jsp中应用是需要声明标签库,有下面两种方式: 1 ... -
context-param和init-param区别
2011-01-26 15:46 496web.xml里面可以定义两种参数: (1)applicati ... -
javax.servlet.Filter运用
2011-01-26 15:46 731Servlets Filter 是Servlet 2.3 规范 ... -
javax.servlet.FilterChain
2011-01-26 15:45 1015javax.servlet Interface Filter ... -
引用 五个有用的过滤器 Filter
2011-01-26 15:45 659引用 xyz 的 五个有用的过滤器 Filter 来源:htt ... -
spring:简单的属性参考
2011-01-26 15:43 592在定义文件(XML配置文件)中定义Bean时,可以直接指定一个 ... -
学习Spring前必须了解的几点【资料搜集】
2011-01-26 15:42 914轻量级(Lightweight) 轻量级的形容是相对于 ... -
struts2:主题: Interceptor在Struts2中的应用... [图片]
2011-01-26 15:41 731Interceptor(拦截器)将Action共用的行为独立出 ... -
struts2配置文件介绍
2011-01-26 15:40 680一、Struts2配置文件 Struts2相关的配置文件有w ...
相关推荐
- 控制反转(Inversion of Control, IoC):通过依赖注入的方式实现控制反转,降低了组件之间的耦合度。 - 面向切面编程(AOP):支持将日志记录、安全控制等功能与业务逻辑分离,提高了代码的可维护性和可读性。 ...
- **IoC(Inversion of Control)容器**:Spring通过IoC容器管理对象的生命周期和依赖关系,使得应用代码更加松耦合。 - **AOP(Aspect Oriented Programming)**:Spring提供了面向切面编程的支持,用于实现如...
Spring作为一个IoC(Inversion of Control)容器,管理着应用中的对象,包括Action和DAO组件。它提供了依赖注入,使得组件间解耦,同时也提供了事务管理功能,以保证数据一致性。Spring还可以通过AOP(面向切面编程...
core-4.1.3.RELEASE.jar、spring-webmvc-4.1.3.RELEASE.jar、spring-web-4.1.3.RELEASE.jar、spring-beans-4.1.3.RELEASE.jar**:这些都是Spring框架的核心库,包含Spring的IoC(Inversion of Control,控制反转)...
Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性,它负责管理对象的生命周期和依赖关系。在本主题中,我们将深入探讨如何手写一个基于XML的Spring IOC实现,模仿Spring框架中的`...
Spring Mybatis是一个流行的Java开发框架,它将Spring的IoC(Inversion of Control)和AOP(Aspect-Oriented Programming)特性与Mybatis的持久层功能相结合,为开发者提供了更强大的数据访问能力。这个整合包包含了...
- **依赖注入(Dependency Injection, DI)**:Spring的核心特性之一,通过反转控制(Inversion of Control, IoC)实现对象之间的解耦,提高代码的灵活性和可测试性。 - **Bean管理**:Spring容器负责创建、配置和...
1. **依赖注入**:Spring通过IoC(Inversion of Control,控制反转)实现依赖注入,使得对象之间的依赖关系可以通过配置文件或注解来管理,而不是硬编码在类内部。 2. **AOP(面向切面编程)**:Spring提供了AOP...
4. **IoC容器**:Spring的Inversion of Control(控制反转)容器是其核心组件,负责管理对象的生命周期和装配。容器根据XML配置文件或注解来创建、配置和管理对象。通过这种方式,对象之间的依赖关系被明确地定义,...
在本实战项目中,我们将深入探讨如何利用这些特性实现一个类似Spring框架的核心注入机制,即控制反转(Inversion of Control,简称IOC)。以下是关于这三个主题的详细讲解以及在Spring中的应用。 1. Java反射: ...
Spring是一个全面的Java企业级应用开发框架,它提供了IOC(Inversion of Control)和AOP(Aspect-Oriented Programming)等核心功能。Spring框架简化了依赖注入,使组件之间解耦,提高了代码的可测试性。Spring还...
这份PDF文件涵盖了Spring3的依赖注入(Inversion of Control,IoC)概念,IoC容器是Spring的核心,负责创建、装配和管理bean。通过实例,学习者可以了解如何定义bean的配置,以及如何通过IoC实现bean之间的依赖关系...
Spring框架是一个开源的Java平台,它提供了控制反转(Inversion of Control,IoC)容器、面向切面编程(Aspect-Oriented Programming,AOP)功能、声明式事务管理、持久层框架整合、MVC Web框架、测试支持等功能。...
1. **spring.jar**:这是Spring框架的核心库,包含了Ioc(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)的基本实现。它提供了依赖注入的功能,使得对象之间的依赖关系可以...
2. **IoC容器**:Inversion of Control (IoC) 是Spring的核心功能之一,它实现了依赖注入(Dependency Injection),使得对象之间的依赖关系可以在运行时动态地配置和管理,而非在代码中硬编码。这极大地提高了代码的...
Spring的IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)机制降低了组件间的耦合度,提高了代码的可测试性和可维护性。Spring还提供了与其它框架(如Hibernate)的整合支持,简化了...
这个版本的Spring支持AOP、IOC(Inversion of Control,控制反转)、数据访问/集成、Web应用等功能。开发者通常会将Spring的核心库如`spring-context`、`spring-beans`等合并到一个单独的JAR中,便于项目引用。 3. ...
Spring框架作为Java企业级应用开发的核心,以其强大的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)特性,为开发者提供了松耦合的组件管理和服务注入机制。通过Spring,我们可以轻松地实现对象...
Spring框架是Java领域中最流行的轻量级应用框架之一,它以IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)为核心理念,为开发者提供了全面的解决方案,包括依赖注入、...
Spring框架在此整合中主要扮演两个角色:一是作为IoC(Inversion of Control)容器,管理对象的生命周期和依赖关系;二是提供事务管理、AOP(Aspect-Oriented Programming)等功能。Spring的applicationContext.xml...