Ioc模式 Dependency Injection模式和AOP讨论

04-01-31 banq
文章见:

http://www.jdon.com/AOPdesign/Ioc.htm

banq
2004-01-31 15:04
也欢迎讨论有关Ioc模式的框架产品 picocontainer (http://www.picocontainer.org). Spring 或其它相关产品。

raimundo
2004-02-01 00:02
我是从楼主的例子里转到这个页面的,我发现楼主的例子对Pico的观点阐述的不是很好,Pico是Type3的IoC Container,也就是Constructor injection的Container,而banq的例子是典型的type 1也就是一种侵入式的interface式的依赖声明(Alvaon就是这样),而不是pico推荐的非侵入式的构造子式的依赖声明,当然这两种方法没有优劣,但是作为pico的IoC例子,我不得不说banq给出的是一个很不恰当的例子。

agilejava
2004-02-01 11:28
昨天专门把这个文章打印拿回家看,可看以半天也没看懂(或许悟性不够),板桥能不能讲得再详细些:)

banq
2004-02-01 12:20
to raimundo

多谢建议,其实我有两个Picocontainer例子,前面一个简单的,与工厂模式比较的是典型的Type3;后者也展现了picocontainer的另外一种用法,其实后者我认为还是构造器注射,也可以参见picocontainer主页的关于水果的举例。我举这个例子主要是为了说明向AOP方向靠拢。

这篇文章不是初级概念读物,因此,一般初学者比较难懂,这篇文章其实是一篇探讨类的文章,我试图通过这篇文章找出依赖注射的优点,以及如何正确使用。

有人以为依赖注射模式打开了框架产品大门,其实,在这概念出现之间,框架产品基本都已经做了,在我设计JdonSD框架时早就使用了这样的注射机制。

但是使用依赖注射开发框架时必须注意它的特点,否则很难把握使用,通过这篇文章我总结了这些特点:首先它只是转移了依赖,而不是消除,而且依赖注射被移植到客户端,这就有一个限制:具体子类必须和注射事件激活在同一个地方,也就是说:药水和注射动作必须结合在一起。注射动作的能量来自两个来源:一个系统自身启动的能量,通过java application的main()实现,在main方法中,可以将具体子类(药水)注射到picocontainer中;

还有一个是系统运行时,由系统用户通过界面键盘输入和鼠标激活的能量,这种能量一般是传递到MVC模式的action中,你可以在action中将具体子类(药水)注射到picocontainer,但是你会发现,这样使用的价值不大,几乎为零,不如使用工厂模式;或者Ioc第一类型,其实EJB的JNDI就是在这种场合下使用的,所以,EJB JNDI虽然烦琐一点,但是从picocontainer和Spring等提供的IOC新实现方式来看,他们还是无法代替JNDI的作用,因此由此提出J3EE(不是J2EE)真是有些唐突啊。

我的这篇文章,就是试图得出picocontainer或Spring之类的局限性,因为任何一个事物都有自己的应用范围,没有全能的技术和思想,找出新事物的局限性,你也许就能把握它了。

猜你喜欢
11Go 1 2 3 4 ... 11 下一页