欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于Java类配置的Bean的装载

程序员文章站 2022-05-23 10:05:36
...

基于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 对象。