精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2004-09-14
是阿..Spring 作为Framework 自然要做的面面俱到一些.. 实际上对我们学习IoC和AOP并没有太大的帮助.
配置文件的好处是,,你对系统作了修改之后不需要重新编译,和扩展自然强一些... 顺便问一下, 有谁能介绍一些好一些的配置工具? |
|
返回顶楼 | |
发表时间:2004-09-14
potian 写道 lyo,ajoo强调得很对,配置文件是定义实际依赖关系的一种方法,pico就可以不用配置文件
应该从核心思想去理解问题而不局限于一种具体的实现方式 你的意思就是说在Spring中,使用IOC是存在这种配置上的依赖关系了?也就是说这里使用IOC体现不出来独到的优势了? 我这样问主要是为了希望马上了解ioc的优点有哪些,否则可能会滥用,使系统做得更复杂。我是针对 Spring问的。[/b] |
|
返回顶楼 | |
发表时间:2004-09-14
IoC的优点就是让你的对象啥都不知道。它不知道自己是不是在一个别的什么容器里面,它不知道自己是不是被配置在XML文件里,它不知道自己需要的对象到哪里去取。如果你把一个对象做成这样了,想想看,放Spring里面还是Pico里面,用XML配置还是别的什么配置,有关系吗?
|
|
返回顶楼 | |
发表时间: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的作者都没有任何意义,你也并不关心。 |
|
返回顶楼 | |