IoC 简介:A Brief Introduction to IoC[读后感]

来源:互联网 发布:快手笑声配音软件 编辑:程序博客网 时间:2024/04/25 23:23

原文地址 http://today.java.net/pub/a/today/2004/02/10/ioc.html

反向控制  Inversion Of Control : 其实就是把控制权从程序转到框架或者容器
依赖注射 Dependency Injection : 就是把配置和程序分离
个人感觉: 就是通过配置初始化对象,可以方面的加载不同的实现
                 达到通过配置将控制和实现分离的目的

当前使用IoC概念的lightweight框架
      Avalon, Spring , PicoContainer
      好像还有Hive之类的,不过没有接触过

这篇文章是讲解IoC最经典的文章之一,我打印了一份 还不错 向 Martin Fowler(马丁 服了)致敬
     Inversion of Control Containers and the Dependency Injection Pattern

文章说IoC不是一个新概念了,其实这个概念就是 依赖反转原则的同义词 文章见下面的链接
     Dependency Inversion Principle (PDF file)
    看来万物相通的道理是正确的 ,不过实现和应用千差万别


下面说一下IoC的三种模型
    其实 叫Type1 Type2 Type3也没什么不好,不过就是不大好记忆其真实含义
    所以“马丁服了”都分别给了新的名称 
 
    Type1 接口注射 Interface Injection
        在IoC之前这种模式就已经应用了,其实原理就是你实现了某个接口,然后框架会去主动的调用它
        其实自定义的Servlet运行就比较象这种模式
        现在只有  Avalon  支持这种模式

    Type2 设值注射 Setter Injection
         使用Bean的Setter方面进行初始化
         好处之一就是可以很方面的进行junit测试,因为只要随便换一个配置文件,就可以进行各种配置的测试了(Spring是这样)
        不好的地方在于Spring要求暴露Setter和Getter方法,一般属性就没有办法隐藏起来
            马丁服了  建议使用 set***Init()的方法使用这个模式,不过我觉得比较麻烦

    Type3 构造注射 Construtor Injection
        这个模式来源于 "Good Citizen." 模式(没有听过,不过猜想是可以保证城市里面配套设施齐全,呵呵....)
        真正的意思是保证对象在创建的时候就是完整有效的,可以杜绝Setter Injection带来的暴露属性问题
        不过这个模式也有一个问题就是类的继承,会导致一些复杂的设计
        而且一般来说一个类的构造方法可能不仅仅是初始化对象,还包含其它的目的,所以还是有选择性的使用比较好 

    顺便说一下DAO模式
         Sun's Pattern Catalog 以后可以看看,现在还没有时间看
J2EE 核心模式

       像普通的Bean一样定义访问数据的方法,不过访问是通过一个抽象的数据访问对象实现的(abstract Data Access Object)

Spring 和 PicoContainer的区别
    先说一下pico的意思 :兆分之一 意思是这个容器特别特别小,意思它是最小的,呵呵 ,这样才符合lightWeight容器的概念
    有点变态......

    言归正传
    Spring可以使用xml配置绑定也可以直接通过java访问
    picoContainer则只可以通过java绑定( PicoExtras 项目提供了pico绑定xml的支持)
    不过现在N多框架和开源项目都使用Xml作配置,维护起来也很头疼,虽然叫做good taste ,但也好不到哪去
    pico相对sring更为lightweight,但对其他项目的支持比较弱,比如hibernate
    而且spring不仅仅提供了IoC,更提供了Aop的支持
    不过有关Aop的支持,可以考虑使用 AspectWerkz or AspectJ. 
    这两个都支持Constructor Injection,但只有Spring支持Setter Injection,所以选择后者只有Spring这个唯一的选择(翻译的比较拗口)
    
    
     
原创粉丝点击