2.2.2 为组件扫描的 bean 命名

Spring 应用上下文中所有的 bean 都会给定一个 ID。在前面的例子中,尽管我们没有明确地为 SgtPeppersbean 设置 ID,但 Spring 会根据类名为其指定一个 ID。具体来讲,这个 bean 所给定的 ID 为 sgtPeppers,也就是将类名的第一个字母变为小写。

如果想为这个 bean 设置不同的 ID,你所要做的就是将期望的 ID 作为值传递给 @Component 注解。比如说,如果想将这个 bean 标识为 lonelyHeartsClub,那么你需要将 SgtPeppers 类的 @Component 注解配置为如下所示:

SgtPeppers.java
@Componet("lonelyHeartsClub")
public class SgtPeppers implements CompactDisc {
  ......
}

还有另外一种为 bean 命名的方式,这种方式不使用 @Component 注解,而是使用 Java 依赖注入规范(Java Dependency Injection)中所提供的 @Named 注解来为 bean 设置 ID:

SgtPeppers.java
package soundsystem;

import javax.inject.Named;

@Named("lonelyHeartsClub")
public class SgtPeppers implements CompactDisc {
  ......
}

Spring 支持将 @Named 作为 @Component 注解的替代方案。两者之间有一些细微的差异,但是在大多数场景中,它们是可以互相替换的。

话虽如此,我更加强烈地喜欢 @Component 注解,而对于 @Named…… 怎么说呢,我感觉它的名字起得很不好。它并没有像 @Component 那样清楚地表明它是做什么的。因此在本书及其示例代码中,我不会再使用 @Named。

Last updated