Spring-Learning-02-使用JavaConfig装配bean

《Spring实战(第四版)》学习笔记

        JavaConfig 类型安全并且对重构友好。因为它就是 Java 代码, 就像应用程序中的其他 Java 代码一样。同时 JavaConfig 是配置代码,这意味着它不包含任何业务逻辑,JavaConfig 也不应该侵入到业务逻辑代码之中。尽管不是必须的,但通常会将 JavaConfig 放到单独的包中,使它与其他的应用程序逻辑分离开来,这样对于它的意图就不会产生困惑了。


package soundsystem;

@Configuration
public class CDPlayerConfig {
    
    @Bean
    @Bean(name="lonelyHeartsClubBand")
    public CompactDisc sgtPeppers() {
      return new SgtPeppers();
    }
}

@Configuration        

        该注解表明这个类是一个配置类,该类应该包含在 Spring 应用上下文中如何创建 bean 的细节。

@Bean

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

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


@Bean
public CDPlayer cdPlayer() {
  return new CDPlayer(sgtPeppers());
}

@Bean
public CDPlayer anotherCDPlayer() {
  return new CDPlayer(sgtPeppers());
}

        同样cdPlayer也是一个被声明的bean,并且其调用了需要传入 CompactDisc 对象的构造器来创建 CDPlayer 实例,但因为sgtPeppers() 方法上添加了 @Bean 注解, Spring 将会拦截所有对它的调用,并确保直接返回该方法所创建的 bean,而不是每次都对其进行实际的调用。

        在软件领域中,我们完全可以将同一个 SgtPeppers 实例注入到任意数量的其他 bean 之中。默认情况下,Spring 中的 bean 都是单例 的,我们并没有必要为第二个 CDPlayer bean 创建完全相同的 SgtPeppers 实例。所以,Spring 会拦截对 sgtPeppers() 的调用并确保返回的是 Spring 所创建的 bean,也就是 Spring 本身在调用 sgtPeppers() 时所创建的 CompactDiscbean。因此,两个 CDPlayer bean 会得到相同的 SgtPeppers 实例。


@Bean
public CDPlayer cdPlayer(CompactDisc compactDisc) {
  return new CDPlayer(compactDisc);
}

        在这里,cdPlayer() 方法请求一个 CompactDisc 作为参数。当 Spring 调用 cdPlayer() 创建 CDPlayerbean 的时候,它会自动装配一个 CompactDisc 到配置方法之中。然后,方法体就可以按照合适的方式来使用它。借助这种技术,cdPlayer() 方法也能够将 CompactDisc 注入到 CDPlayer 的构造器中,而且不用明确引用 CompactDisc 的 @Bean 方法。


        注:带有 @Bean 注解的方法可以采用任何必要的 Java 功能来产生 bean 实例。构造器和 Setter 方法只是 @Bean 方法的两个简单样例。这里所存在的可能性仅仅受到 Java 语言的限制。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值