浏览 4616 次
锁定老帖子 主题:help: 一个配置问题
精华帖 (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? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2004-12-14
spring好像本身不支持每个线程的singleton。
看看这个帖子吧,可能会有帮助的:http://forum.iteye.com/viewtopic.php?t=9384&highlight=threadlocal 然后你把上面帖子里的类用来作为生成A的factory(spring里面的static factory method)。一点思路,仅供参考。 |
|
返回顶楼 | |
发表时间:2004-12-14
楼上提示的方法感觉不错!
我想问一下B,C 之间是否有联系呢? |
|
返回顶楼 | |
发表时间:2004-12-14
再贴一个链接,关于threadlocal和用threadlocal来做每线程 Singleton的文章。虽然和spring没什么关系,但是值得一看。
http://www-900.ibm.com/developerWorks/cn/java/j-threads/index3.shtml |
|
返回顶楼 | |
发表时间: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里能做吗? |
|
返回顶楼 | |
发表时间: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来管理。 |
|
返回顶楼 | |
发表时间:2004-12-16
也可以这样,把A,B,C,D的这种创建的依赖关系封装到一个factorybean里面,可以在里面手动控制这四个对象的生成,然后就可以让spring管理这个factorybean。外部访问只要d1 = get("d")就可以了。
|
|
返回顶楼 | |