在java里,有很多方法可以把许多组件或者接口组成一个大的应用程序,Dendency Injection可以作为服务定位器的一种实现。
在j2ee的世界中有很多的开源的,活跃的框架实现了Inversion of control ,比如说 PicoContainer 和spring,探究一下他们表面下面的一些原则是很有意思的一件事。
说起组件可以找到上百本书和概念去介绍他,而我理解的是他是这样一种软件,他不会被轻易修改,作者并不能控制他的使用,系统用它的时候并不需要修改他们的代码。而一个服务跟组件一样也是被外界环境所调用,但是组件只是以一种短暂的方式被调用,(jar,dll),而服务是一种长久的(webservice,socket)。
class MovieLister...
public Movie[] moviesDirectedBy(String arg) {
List allMovies = finder.findAll();
for (Iterator it = allMovies.iterator(); it.hasNext();) {
Movie movie = (Movie) it.next();
if (!movie.getDirector().equals(arg)) it.remove();
}
return (Movie[]) allMovies.toArray(new Movie[allMovies.size()]);
}
比如说这段代码,写的很不优雅,他让finder返回所有的电影,而去除之后自己筛选,我的真正的目的是让
一个美妙的movieDirectBy方法独立于电影如何被存储,所以所有的方法都指向一个借口finder,如何找取决于客户端的要求,
public interface MovieFinder {
List findAll();
}
这样就可以做到一定程度的解耦,
class MovieLister...
private MovieFinder finder;
public MovieLister() {
finder = new ColonDelimitedMovieFinder("movies1.txt");
}
比如说我想从一个文件中获取所有的movie,这样只要获取对应的专门处理这个的finder就可以了。
当然我可以从其他地方,如xml文件,web serivce,或者是SQL database都可以这样,比如说我的一个朋友也想
得到这些电影,但是我不知道他的电影是以哪种方式存储的,就不能在编译环境中加载这些类,这就是IOC出现的意义,
我感觉说spring的一大特性是IOC这根本算不上特性,因为这是所有轻量级框架都能够实现的。
ioc主要要考虑的就是怎么样把所需的组件是配到需要的调用者,di可以说是其中一种实现方式。
可以有constructor注入,setter注入,interface注入(比如说struts)等等,这里就不一一列举了。
除了DI我们还可以用service locator来查找相应的服务,他的中心思想是locator知道怎么样去hold住所有所需的服务,
就像他知道哪个finder去寻找影片。
我现在用单例来实现locator
class MovieLister...
MovieFinder finder = ServiceLocator.movieFinder();
class ServiceLocator...
public static MovieFinder movieFinder() {
return soleInstance.movieFinder;
}
private static ServiceLocator soleInstance;
private MovieFinder movieFinder;3
这只是这个locator的一个比较粗陋的实现,我们还可以把它设置成动态的,
class ServiceLocator...
private static ServiceLocator soleInstance;
public static void load(ServiceLocator arg) {
soleInstance = arg;
}
private Map services = new HashMap();
public static Object getService(String key){
return soleInstance.services.get(key);
}
public void loadService (String key, Object service) {
services.put(key, service);
}
个人感觉locator更像是一个工厂,选择色service locator还是DI完全取决于具体的情况。
分享到:
相关推荐
### 什么是控制反转(IoC)与依赖注入(DI) #### 控制反转(IoC) ...总的来说,IoC和DI是现代软件开发中非常重要的概念和技术,它们有助于构建出结构清晰、易于维护和扩展的系统,是实现模块化和松耦合的关键所在。
什么是spring,spring核心,spring优点,spring体系结构, 入门案例,DI基础,核心API,文档内附代码
Spring IoC 和 DI 注解开发 Spring IoC 和 DI 注解开发概述 Spring IoC(Inverse of Control,控制反转)是一种软件设计模式,它将传统的控制权从应用程序转移到框架中,使得应用程序更加灵活和可扩展。DI...
在实际开发中,我们可能会使用Spring Tool Suite(STS)、IntelliJ IDEA等集成开发环境,配合Maven或Gradle构建工具,以及各种测试框架来实现和测试基于Spring的DI和IOC的应用。 在压缩包文件"spring3_day01"中,...
在软件开发中,IOC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)是两种重要的设计模式,它们对于实现灵活、可维护的代码具有重要作用。这些概念遵循了开闭原则(OCP,Open-Closed ...
### Spring IOC与DI注解开发知识点详解 #### 一、Spring框架...通过以上内容,我们可以了解到Spring框架中IOC和DI的基本概念,以及如何配置和使用数据源(连接池)。这为开发高效稳定的企业级应用提供了坚实的基础。
master”这个描述可能指的是一个示例项目,它演示了如何使用Inversion of Control (IoC)和Dependency Injection (DI)原则,特别是通过“IocPerformance-master”这个文件夹名来看,可能是针对IoC和DI性能的测试或...
Spring的核心特性包括AOP(面向切面编程)和IOC(控制反转),以及依赖注入(DI)。以下是对这些概念的详细解释: **面向切面编程(AOP)** AOP是一种编程范式,它允许开发者将关注点从主业务逻辑中分离出来,例如...
"IOC(DI)与AOP概念的理解" IOC(Inversion of Control,控制反转)和DI(Dependency ...IOC、DI和AOP都是软件设计中重要的概念。它们可以帮助我们写出更加灵活、可维护的代码,提高软件系统的可扩展性和可维护性。
【Spring——DI和通过注解实现IOC和DI】 在软件设计中,依赖注入(Dependency Injection,简称DI)是一种设计模式,用于减少代码间的耦合,提高应用的可测试性和可维护性。DI的核心思想是,组件之间的依赖关系不再...
总的来说,这个项目提供了一个从零开始学习和理解IOC、DI和Servlet应用的机会,对于Java Web开发者来说,深入理解这些基础概念对于提升技能和解决实际问题非常有帮助。通过这种方式,开发者能够更好地掌握Web应用的...
Spring IOC和DI实现原理及实例解析 Spring IOC(Inversion of Control,控制反转)是Spring框架的基础,它简单地说就是创建对象由以前的程序员调用new构造方法,变成了交由Spring创建对象。DI(Dependency Inject,...
标题 "ioc_di (1)" 暗示了我们即将探讨的话题是有关于IoC(Inversion of Control)和DI(Dependency Injection),这是Spring框架中的核心概念。这些概念在软件工程中至关重要,因为它们有助于实现松耦合和可维护性...
【Spring核心IOC以及DI】是Spring框架中的关键概念,它们是Spring实现控制反转(Inversion of Control,简称IOC)和依赖注入(Dependency Injection,简称DI)的基石。这两个概念是Spring框架的核心,使得应用程序的...
C#作为一种广泛应用的编程语言,提供了丰富的支持来实现DI和IoC。 首先,让我们澄清一下这两个术语。控制反转(IoC)是指将应用程序的控制权从代码内部转移到外部,通常是通过某种框架或容器来管理对象的生命周期和...
本文中,作者深入探索IOC模式的工作原理,给它一个更能描述其特点的名字——“依赖注入”(Dependency Injection),并将其与“服务定位器”(Service Locator)模式作一个比较。不过,这两者之间的差异并不太重要,...
spring入门
在Spring框架中,Bean管理是核心特性之一,它涉及到依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IoC)。这两者是面向对象编程中设计模式的重要概念,也是Spring提高应用程序可...
#### 三、DI和IOC的关系 DI(依赖注入)实际上是IOC(控制反转)思想的具体应用。在DI中,容器负责创建对象,并将对象注入到需要使用这些对象的地方。这意味着对象不再需要知道其依赖对象是如何创建的,也不需要...