锁定老帖子 主题:IOC, huh?
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2004-08-17
感觉Ajoo把Spring&Pico当毒瘤一般^^。
不要吓坏同学们。呵呵。至少可以让我们COP一下下。找到一点感觉。 --- to:JJX 小蒋你也来啦。。。 |
|
返回顶楼 | |
发表时间:2004-08-17
呵呵.怪不得我啊.
看看一些孜孜不倦地到处调用PicoContainer.newXXXInstance()的同学们吧. 他们觉得所谓ioc就是调用这些ioc容器的api. 连久经考验的readonly同志都不由自主地在依赖着容器来封装组件的实现细节变化了. 你们还说我耸人听闻? 也许不是pico们的错, 也许pico们在推广ioc这一个自然得不能再自然的面向接口的基本惯用法上有一定功劳.但是它们实际上起的误导作用也不小. 我越来越相信有必要正本清源一下了. |
|
返回顶楼 | |
发表时间:2004-08-18
ajoo 写道 呵呵.怪不得我啊.
看看一些孜孜不倦地到处调用PicoContainer.newXXXInstance()的同学们吧. 他们觉得所谓ioc就是调用这些ioc容器的api. 连久经考验的readonly同志都不由自主地在依赖着容器来封装组件的实现细节变化了. 你们还说我耸人听闻? 也许不是pico们的错, 也许pico们在推广ioc这一个自然得不能再自然的面向接口的基本惯用法上有一定功劳.但是它们实际上起的误导作用也不小. 我越来越相信有必要正本清源一下了. 不觉得你的表达有问题。使用ioc就应忘记ioc的存在,不应在代码中使用ioc container。但现实中却总发现有把pico/spring当作new/factory的替代的。连pico网站上的实例中都有这样的代码,真把我搞糊涂了。 求教ajoo,我理解下来,觉得不管pico还是spring,都是把依赖对象注入到成员变量上的,那这样的话如何处理多线程的同步问题呢?譬如同一个bean同时被两个线程调用,而我考虑想实现这个bean能每次被调用时依赖不同的bean。这种情况是不是实际中不存在的?还是因为ioc是种组织静态对象的方式,本就不应该通过ioc方式考虑这种动态情况? |
|
返回顶楼 | |
发表时间:2004-08-18
呵呵。谢谢支持。
关于多线程,如果你用构造函数注射,并且你的成员变量是final的话,应该没有问题的(至少ioc本身不会造成问题)。至于用setter的话,自己手工处理组装的话就自己synchronized咯。用容器的话,我不是很清楚spring如何处理的,相信应该也有办法同步的。反正我也不大关心,因为用setter在我这就不是一个option。 |
|
返回顶楼 | |
发表时间:2004-10-30
引用 用容器的话,我不是很清楚spring如何处理的,相信应该也有办法同步的。
哪位老大了解这个问题能否给讲解一下,不懂 |
|
返回顶楼 | |
发表时间:2004-11-23
关键是注入的时机太不灵活了。
都是在构造时注入的(限于Spring,pico我不熟)。 不管Type2还是Type3,都是在getBean()中完成的。(也许你自己不调用getBean(),可是总有地方调用——比如说WebWork) 因此,这个对象一旦构造完成了,就无法再自动注入了。(反正我是不知道怎么做) 如果自己手动set的话,那你用来注入的对象哪儿来的?AAA.getBBB()? 还有一个问题:有可能类的某一个方法需要一个对象A,其他的方法都不需要。因此,我没有必要把它做成一个类的成员。我希望是 funcA (A a);{ a.???();; } 最好是 funcA();{ A a; a.???();; } 这如何注入? AOP可以截住函数调用,但是如何注入? |
|
返回顶楼 | |
发表时间:2004-11-23
mis98zb 写道 最好是 funcA();{ A a; a.???();; } 我就不知道这个好在哪里。你怎么给funcA()做单元测试?你怎么在JUnit TestCase里面把a对象注射进去? |
|
返回顶楼 | |