美文网首页
基于Java类配置的Bean的装载

基于Java类配置的Bean的装载

作者: 禅与发现的乐趣 | 来源:发表于2018-07-19 18:40 被阅读87次

    基于Java类配置的Bean的装配

    在大多数情况下,通过组件扫描和自动装配实现Spring的自动化配置是更为推荐的方式,但是有时候,自动化配置的方案行不通,需要明确配置Spring。比如你想要将第三方库中的组件装配到你的应用中,在这种情况下,是没有办法在它的类上添加@Component和@Autowired注解的,所以就不能使用自动化装配的方案了。

    使用显示装配的方式有两种可行方案,Java和XML,XML前面已经详细介绍过了,现在我们来看看如何使用Java类进行配置。

    创建配置类

    在进行显示配置时,JavaConfig是更好的方案,它更为强大,类型安全并且对重构友好,因为它就是Java代码,因为JavaConfig是配置代码,也就意味着它不应该包含任何业务逻辑,也不应该侵入到业务逻辑代码之中,尽管不是必须的,但是通常将JavaConfig放到单独的包中。

    @Configuration
    public class CDPlayerConfig {
    }
    

    创建配置类的关键是添加@Configuration注解,该注解表面这个类是一个配置类,该类应该包含在Spring应用上下文中如何创建Bean的细节

    声明简单的Bean

    要在 JavaConfig 中声明 bean,需要编写一个方法,这个方法会创建所需类型的实例,然后给这个方法添加@Bean 注解。

    @Bean
    public CompactDisc sgtPeppers() {
        return new SgtPepper();
    }
    

    默认情况下,bean 的 ID 与带有@Bean注解的方法名是一样的,这里就是sgtPeppers,如果要设置一个不同的名字,可以使用下面的方式:

    @Bean(name = "loneyHeartsClubBand")
    public CompactDisc sgtPeppers() {
        return new SgtPepper();
    }
    

    只要是最终返回一个 CompactDisc 的实例,所以你可以在方法中做各种 Java 支持的处理,比如随机选择一个 CompactDisc 来返回等。

    借助JavaConfig实现注入

    前面声明的 CompactDisc bean 是非常简单的,没有任何的依赖,直接返回实例。但是如果我们要声明 CDPlayer bean,它依赖于CompactDisc,那该如何装配呢?
    直接引用创建 bean 的方法:

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

    这里调用了需要传入 CompactDisc 对象的构造器来创建 CDPlayer 实例,CompactDisc 对象是通过 sgtPeppers()方法获得的,这看起来好像没什么问题,但是 agtPeppers 是添加了@Bean 注解的,这样 Spring 会拦截所有对它的调用,并确保直接返回该方法所创建的 bean,什么意思呢,就是 sgtPeppers 创建的实例对象成为单例的了,多个调用,实际上共享的是同一个 bean 对象。

    相关文章

      网友评论

          本文标题:基于Java类配置的Bean的装载

          本文链接:https://www.haomeiwen.com/subject/gqfxmftx.html