Java 在springs中,bean id的名称和引用名称是否应该始终相同?

Java 在springs中,bean id的名称和引用名称是否应该始终相同?,java,spring,spring-bean,Java,Spring,Spring Bean,我最近正在深入研究Springs框架,刚刚提出了一个小问题。 假设我们有这样一个类: class A { @Autowired private B hello; .... .... } <bean id="abc" class="org.eclipse.packageName.B"/> 在xml文件中,我定义如下: class A { @Autowired private B hello; .... .... }

我最近正在深入研究Springs框架,刚刚提出了一个小问题。 假设我们有这样一个类:

class A
{
    @Autowired
    private B hello;
    ....
    ....
}
<bean id="abc" class="org.eclipse.packageName.B"/>
在xml文件中,我定义如下:

class A
{
    @Autowired
    private B hello;
    ....
    ....
}
<bean id="abc" class="org.eclipse.packageName.B"/>

创建的bean中的id名称和类A中提到的引用名称是否相同


另一个问题是:如果我们@autowired一个字段,编译器如何知道这个类的bean在xml中被提及。这个链接是如何在内部完成的?

不,bean id不需要与引用类中的字段名相同。注入基于类型,而不是Spring中的id(除非使用注释)


注入在运行时由提供。

id参数用于限定bean。因此,它不需要与类名相同。您可以通过执行以下操作来引用bean:

@Autowired
@Qualifier("abc")
private B Hello
如果您提供了两个相同类型的bean,那么这非常有用,然后您可以通过使用@Qualifier注释引用其id来指定要自动关联的bean。
如果您只有一个特定类型的bean,@Qualifier是多余的,Spring将在引用该bean时自动连接该bean,而无需知道其id。

您可以编写一个快速单元测试来验证?关于第二个问题,编译器不知道该bean,bean在运行时加载到应用程序上下文。springs中创建的两个bean的name属性是否相同?@mshikher“name”属性充当“id”的别名,因此它在应用程序上下文中必须全局唯一。