论坛首页 Java企业应用论坛

有研究Ioc的吗? 他的原理和DAO的实现关系?!

浏览 8745 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2004-09-14  
是阿..Spring 作为Framework 自然要做的面面俱到一些..  实际上对我们学习IoC和AOP并没有太大的帮助.


配置文件的好处是,,你对系统作了修改之后不需要重新编译,和扩展自然强一些...


顺便问一下, 有谁能介绍一些好一些的配置工具?
0 请登录后投票
   发表时间:2004-09-14  
potian 写道
lyo,ajoo强调得很对,配置文件是定义实际依赖关系的一种方法,pico就可以不用配置文件

应该从核心思想去理解问题而不局限于一种具体的实现方式


你的意思就是说在Spring中,使用IOC是存在这种配置上的依赖关系了?也就是说这里使用IOC体现不出来独到的优势了?
我这样问主要是为了希望马上了解ioc的优点有哪些,否则可能会滥用,使系统做得更复杂。我是针对 Spring问的。[/b]
0 请登录后投票
   发表时间:2004-09-14  
IoC的优点就是让你的对象啥都不知道。它不知道自己是不是在一个别的什么容器里面,它不知道自己是不是被配置在XML文件里,它不知道自己需要的对象到哪里去取。如果你把一个对象做成这样了,想想看,放Spring里面还是Pico里面,用XML配置还是别的什么配置,有关系吗?
0 请登录后投票
   发表时间:2004-09-14  
另一个办法是证明,你的方法在灵活性上只是ioc的真子集。
你是这么做的吧?
class MyClient{
  void f();{
  DataSource ds = DAOFactory.getInstance();.getMydataSource();; 
   ...
}
 ...
}

使用ioc:
class MyClient{
  private final DataSource ds
  MyClient(DataSource ds);{this.ds = ds;}
  void f();{
    ...
  }
}

用ioc实现你的那个东西非常简单:
MyClient mc = new MyClient(DAOFactory.getInstance();.getMyDataSource(););;

看,功能和你的版本完全一样。

但是,ioc的灵活性远不止于此,比如,我可以:
MyClient mc = new MyClent(new MyDataSourceDecorator(DAOFactory.getInstance();.getMyDataSource(););;

也可以:
MyClient mc = new MyClient(DAOFactory2.getInstance();.getMyDataSource(););;

甚至还可以:
MyClient mc = new MyClient(MockDataSource.instance(););;


等等等等。你直接去取得DataSource,就把你的代码绑死在一个DataSource的实现上了。(虽然你可以通过改动DAOFactory来静态改动这个实现)。
但是你用ioc,那么就把这无限的灵活性保留,让组装模块去选择合适的实现。

再说一遍,配置文件和ioc是正交的概念。我上面的例子一个都没有用配置文件。对MyClient来说,配置模块仅仅是在它外部。至于到底在哪里,是配置文件还是另一块java代码,对MyClient,对你这个MyClient的作者都没有任何意义,你也并不关心。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics