Mar*_*ark 4 spring inversion-of-control autowired
**更改了示例以更好地表达情况
我使用的是2.5版弹簧并且有以下情况
@Component
@Scope("prototype")
Class Foo
{
}
class A
{
@Autowired
Foo fooA;
}
class B
{
@Autowired
Foo fooB;
}
class C
{
@Autowired
Foo fooC;
}
Run Code Online (Sandbox Code Playgroud)
我想了解是否有某种方式来使用@Autowired和绑定的同一个实例FOO上
fooA,并fooB同时结合不同的实例fooC
我明白,如果它的范围FOO将是singleton有效的
但是如果有一种方法可以在使用protoype示波器时达到相同的目标,我就会徘徊.
还请解释一下这是自动装配概念的正确用法吗?我试图滥用弹簧框架的目的
由于既没有singleton,也不prototype范围似乎适合你(你不想要的单个对象,但你不希望每次新的实例),你需要另一个范围.
在Web应用程序上下文中有一个现成的解决方案 - 使用request范围 - 因此在每个请求/响应周期中,只有一个bean实例,无论您注入它的位置和次数.
在非Web应用程序上下文中,您可以定义自己的实现 org.springframework.beans.factory.config.Scope
更新:在你澄清之后,这似乎是一个非常奇怪的案例.我想到的是以下内容:
FactoryBeans(实际上是子类AbstractFactoryBean) - 每次返回一个新对象,一个返回同一个对象(两个都应该在singleton范围内)Foos @Resource(name="prototypeFactoryBean")和@Resource(name="singletonFactoryBean")(而不是@Autowired)注入ssingletonFactoryBean可以设计成只返回一个单身(在工厂bean类注射)prototypeFactoryBean可以创建一个新的实例,施放BeanFactory(通过提供getBeanFactory())来AutowireCapableBeanFactory和调用.autowire(newlyCreatedBean),然后返回.(或者你可以注射ApplicationContext并得到它AutowireCapableBeanFactory)但这太复杂了,即使在我的解释之后你也需要延长弹簧知识:)
此外,我认为你应该重新考虑你的设计,而不是做出上述'怪癖'
更新2:在您发表评论后,命名概念将转移到注释 - 正如我上面所说,您可以使用@Resource(name="someBean")
范围的全部要点prototype是您每次都会获得不同的实例。
另外,自动装配原型范围的 bean 在设计方面是有问题的(事实上,如果允许的话,我会感到有点惊讶)。通常的想法是将相同范围的 bean 自动装配在一起(有一些方法可以解决这个问题,但这里不相关)。
关于你的设计的一切都表明它Foo不应该是原型 - 为什么你要这样做?
| 归档时间: |
|
| 查看次数: |
7254 次 |
| 最近记录: |