Spring @Autowire注释

时间:2015-02-09 00:18:19

标签: java spring

我对Spring Autowire Annotation有一个问题。场景是这样的:我在A类上使用@Autowire并在2个地方使用它 - 如下所示 - 类B和C类:

public class B 
{

@Autowired
private A a;
......

Map<String, Map<String,String>> map1=a.getNameValues();
Map<String, Map<String, String>> map2 = a.get("key");
if (map2!=null)
 map1.putAll(map2);

以及其他C类如下所示:

public class C 
 {

@Autowired
private A a;
......

Map<String, Map<String,String>> map1=a.getNameValues();
Map<String, Map<String, String>> map2 = a.get("key");
if (map2!=null)
map1.putAll(map2);
 }

程序控制从B类流向C类。因此,A类在两个地方都是自动装配的。因此,当控件首先到达B类时,将检索map2并将其放入map1中。当控件来到C类时,map1已经有了map2值。控制这种情况的可能方法有哪些?因为我希望两个类独立工作并使用Autowired类。让我知道你的想法。

1 个答案:

答案 0 :(得分:2)

@Autowire会自动将spring bean注入给定的属性。

听起来你的问题实际上与被注入的bean的范围有关。假设您的A类看起来像这样:

@Component
public class A {
    ....
}

接下来会发生什么是spring将创建A的单个实例(也称为Singleton)(在给定的应用程序上下文中)并将其注入BC

问题 - 这是您要解决的问题吗?当你说你希望两个类独立行动时,你的意思是AB中的C对象是完全相同的对象?

要让Spring连接A的新实例,您只需将A的范围更改为原型。

@Component
@Scope(value = "prototype")
public class A {
    ....
}  

或在xml中

<bean id="a" class="A" scope="prototype"/>