我对Spring Autowire Annotation有一个疑问。场景是这样的:Iam在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类。让我知道你的想法。

最佳答案

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

听起来您的问题实际上与所注入的bean的范围有关。因此,假设您的A类如下所示:

@Component
public class A {
    ....
}


然后将发生的事情是spring将创建A的单个实例(也称为Singleton)(在给定的应用程序上下文中)并将其注入BC

问题-这是您要解决的问题吗?当您说要两个类都独立运行时,是指以下事实:AB中的C对象是完全相同的对象吗?

为了使弹簧连接A的新实例,您可以简单地将A的范围更改为原型。

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


或在xml中

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

09-25 19:55