论坛首页 Java企业应用论坛

help: 一个配置问题

浏览 4616 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2004-12-14  
被一个问题所困扰:

假设 三个类: A, B, C   我希望的是:

a = new A
new B(a)
new C(a)

如果是 singleton 没有问题。问题是我需要的是对每个thread创建这三个对象。问题是:如果配制成non-singleton, 结果就变成:

a1 = new A
new B(a1)
a2 = new A
new C(a2)

A被创建了两次.  how to fix?
   发表时间:2004-12-14  
spring好像本身不支持每个线程的singleton。
看看这个帖子吧,可能会有帮助的:http://forum.iteye.com/viewtopic.php?t=9384&highlight=threadlocal

然后你把上面帖子里的类用来作为生成A的factory(spring里面的static factory method)。一点思路,仅供参考。
0 请登录后投票
   发表时间:2004-12-14  
楼上提示的方法感觉不错!

我想问一下B,C 之间是否有联系呢?
0 请登录后投票
   发表时间:2004-12-14  
再贴一个链接,关于threadlocal和用threadlocal来做每线程 Singleton的文章。虽然和spring没什么关系,但是值得一看。
http://www-900.ibm.com/developerWorks/cn/java/j-threads/index3.shtml
0 请登录后投票
   发表时间:2004-12-16  
de3light 写道
spring好像本身不支持每个线程的singleton。
看看这个帖子吧,可能会有帮助的:http://forum.iteye.com/viewtopic.php?t=9384&highlight=threadlocal

然后你把上面帖子里的类用来作为生成A的factory(spring里面的static factory method)。一点思路,仅供参考。


其实这个问题和threadlocal没有关系。把我上面的例子在具体一下:

a = new A
b = new B(a)
c = new C(a)
d = new (b,c)


in code:

d1 = get("d")       // 得到一组对象: a1, b1(a1), c1(a1), d1(b1,c1)
d2 = get("d")       // 得到另一组对象: a2, b2(a2), c2(a2), d2(b2,c2)

在spring里能做吗?
0 请登录后投票
   发表时间:2004-12-16  
:oops: ,是我理解错了。
我觉得spring的singleton和prototype都不能达到这种效果。我在考虑你这样的设计是不是一种不良的依赖关系(在你这种特殊的约束下)?可以这样:
a = new A
d=new (a)
b = new B(d)
c = new C(d)
d和c要得到a的话可以通过d来得到,a,b,c,d都设置成prototype。当然,这里最重要的是语义,a是否的却可以作为d一个成员?我不知道你的上下文环境,只能这样猜了,不行不要骂偶啊。
如果真的不行的话,自己手动控制好了,没有必要什么东西都硬要让spring来管理。
0 请登录后投票
   发表时间:2004-12-16  
也可以这样,把A,B,C,D的这种创建的依赖关系封装到一个factorybean里面,可以在里面手动控制这四个对象的生成,然后就可以让spring管理这个factorybean。外部访问只要d1 = get("d")就可以了。
0 请登录后投票
论坛首页 Java企业应用版

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