2.3.2 声明简单的 bean

要在 JavaConfig 中声明 bean,我们需要编写一个方法,这个方法会创建所需类型的实例,然后给这个方法添加 @Bean 注解。比方说,下面的代码声明了 CompactDisc bean:

CompactDisc.java
@Bean
public CompactDisc sgtPeppers() {
  return new SgtPeppers();
}

@Bean 注解会告诉 Spring 这个方法将会返回一个对象,该对象要注册为 Spring 应用上下文中的 bean。方法体中包含了最终产生 bean 实例的逻辑。

默认情况下,bean 的 ID 与带有 @Bean 注解的方法名是一样的。在本例中,bean 的名字将会是 sgtPeppers。如果你想为其设置成一个不同的名字的话,那么可以重命名该方法,也可以通过 name 属性指定一个不同的名字。

CompactDisc.java
@Bean(name="lonelyHeartsClubBand")
public CompactDisc sgtPeppers() {
  return new SgtPeppers();
}

不管你采用什么方法来为 bean 命名,bean 声明都是非常简单的。方法体返回了一个新的 SgtPeppers 实例。这里是使用 Java 来进行描述的,因此我们可以发挥 Java 提供的所有功能,只要最终生成一个 CompactDisc 实例即可。

请稍微发挥一下你的想象力,我们可能希望做一点稍微疯狂的事情,比如说,在一组 CD 中随机选择一个 CompactDisc 来播放:

@Bean
public CompactDisc randomBeatlesCD() {
  int choice = (int) Math.floor(Math.random() * 4);
  if (choice == 0) {
    return new SgtPeppers();
  } else if (choice == 1) {
    return new WhiteAlbum();
  } else if (choice == 2) {
    return new HardDaysNight();
  } else {
    return new Revolver();
  }
}

现在,你可以自己想象一下,借助 @Bean 注解方法的形式,我们该如何发挥出 Java 的全部威力来产生 bean。当你想完之后,我们要回过头来看一下在 JavaConfig 中,如何将 CompactDisc 注入到 CDPlayer 之中。

Last updated