Spring 按名称注释
Spring Annotations by name
我有一个与 Spring 注释相关的问题。在我的(学习)项目中,我定义了两个 class 和另一个具有两个属性的 class,这两种类型各有一个。
为了生成错误,我在 XML 中定义了两个相同 class 类型的 bean,并且在 setter 方法中使用了 @Autowired 注释。像这样:
<bean id="classA" class="beans.ClassA"></bean>
<bean id="otherclassA" class="beans.ClassA"></bean>
<bean id="classB" class="beans.ClassB"></bean>
public class UpperClass{
private ClassA classA;
private ClassB classB;
@Autowired
public void setClassA(ClassA classA){this.classA = classA}
@Autowired
public void setClassB(ClassB classB){this.classB = classB}
/* .
.
.
*/
}
在主要 class 中,我获得了该 bean 的 applicationcontext 实例,并打印覆盖 toString 方法的属性的内容,这是一个简单的测试。
我读过 Spring Autowired 注释按类型查找 bean,因此测试应该会失败,因为定义了两个 ClassA class bean,但它可以工作。
它也可以使用 @Resource 注释而不使用其中的任何名称。
我正在使用 Spring 版本 4。
我已将 bean 的 ID 更改为与 class/setters 名称不匹配,但它失败了,正如预期的那样。
谁能告诉我为什么,或者我做错了什么?
Spring 如果按类型找不到 beans,是否按名称查找?
Spring 将查看方法参数名称以解决当有多个 bean 与所需类型匹配时的歧义。在我看来,它太神奇了,也是避免 @Autowired
的另一个原因。如果您最终使用(或不得不处理其他人的使用)这种行为,IntelliJ 的 Spring 插件可以很好地确定哪个 bean 将实际注入到自动装配站点。
我有一个与 Spring 注释相关的问题。在我的(学习)项目中,我定义了两个 class 和另一个具有两个属性的 class,这两种类型各有一个。 为了生成错误,我在 XML 中定义了两个相同 class 类型的 bean,并且在 setter 方法中使用了 @Autowired 注释。像这样:
<bean id="classA" class="beans.ClassA"></bean>
<bean id="otherclassA" class="beans.ClassA"></bean>
<bean id="classB" class="beans.ClassB"></bean>
public class UpperClass{
private ClassA classA;
private ClassB classB;
@Autowired
public void setClassA(ClassA classA){this.classA = classA}
@Autowired
public void setClassB(ClassB classB){this.classB = classB}
/* .
.
.
*/
}
在主要 class 中,我获得了该 bean 的 applicationcontext 实例,并打印覆盖 toString 方法的属性的内容,这是一个简单的测试。 我读过 Spring Autowired 注释按类型查找 bean,因此测试应该会失败,因为定义了两个 ClassA class bean,但它可以工作。 它也可以使用 @Resource 注释而不使用其中的任何名称。
我正在使用 Spring 版本 4。 我已将 bean 的 ID 更改为与 class/setters 名称不匹配,但它失败了,正如预期的那样。
谁能告诉我为什么,或者我做错了什么? Spring 如果按类型找不到 beans,是否按名称查找?
Spring 将查看方法参数名称以解决当有多个 bean 与所需类型匹配时的歧义。在我看来,它太神奇了,也是避免 @Autowired
的另一个原因。如果您最终使用(或不得不处理其他人的使用)这种行为,IntelliJ 的 Spring 插件可以很好地确定哪个 bean 将实际注入到自动装配站点。