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

Spring入门(三):通过JavaConfig装配bean

程序员文章站 2022-04-08 19:24:51
上一篇博客中,我们讲解了使用组件扫描和自动装配实现自动化装配bean,这也是最好的使用方式。 但是某些场景下,我们可能无法使用自动装配的功能,此时就不得不显式的配置bean。 比如我们引用了一个第三方类库,需要将类库中的某个类装配到项目中,我们不可能在该类上添加@Component注解,因此无法使用 ......

上一篇博客中,我们讲解了使用组件扫描和自动装配实现自动化装配bean,这也是最好的使用方式。

但是某些场景下,我们可能无法使用自动装配的功能,此时就不得不显式的配置bean。

比如我们引用了一个第三方类库,需要将类库中的某个类装配到项目中,我们不可能在该类上添加@component注解,因此无法使用自动装配的功能。

spring中有以下两种方式显式配置bean:

  1. 通过javaconfig配置bean
  2. 通过xml配置bean

本篇博客主要讲解下通过javaconfig配置bean的实现方法,通过xml配置bean的实现方法后续再单独写一篇博客。

我们还使用上一篇博客中的例子,不过代码会做适当修改。

package soundsystem.javaconfig;

public interface compactdisc {
    void play();
}
package soundsystem.javaconfig;

public class sgtpeppers implements compactdisc {

    @override
    public void play() {
        string title = "sgt.pepper's lonely hearts club band";
        string artists = "the beatles";
        system.out.println("playing " + title + " by " + artists);
    }
}
package soundsystem.javaconfig;

public class cdplayer {

    private compactdisc compactdisc;

    public cdplayer(compactdisc compactdisc) {
        this.compactdisc = compactdisc;
    }

    public void play() {
        compactdisc.play();
    }
}

注意:和上一篇博客相比,我们去掉了sgtpeppers类和cdplayer类上的@component注解。**

1.创建配置类

package soundsystem.javaconfig;

import org.springframework.context.annotation.configuration;

@configuration
public class cdplayerconfig {
}

2.声明bean

在javaconfig中,我们使用@bean注解来声明bean,如下所示:

package soundsystem.javaconfig;

import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;

@configuration
public class cdplayerconfig {
    @bean
    public compactdisc sgtpeppers() {
        return new sgtpeppers();
    }
}

默认生成的bean id和方法名一致,即sgtpeppers,不过我们可以自定义:

@bean(name = "lonelyheartsclub")
public compactdisc sgtpeppers() {
     return new sgtpeppers();
}

上面声明的bean比较简单,没有任何其它依赖,但是有些复杂的bean,比如cdplayer,它依赖于compactdisc,那我们该如何声明呢?

简单的一种方式是,直接使用刚刚定义的sgtpeppers()方法作为cdplayer构造器的参数依赖:

@bean
public cdplayer cdplayer() {
    return new cdplayer(sgtpeppers());
}

不过更建议的是以下方式,将依赖项作为bean方法的参数,spring会自动匹配到参数依赖项:

@bean
public cdplayer cdplayer(compactdisc compactdisc) {
    return new cdplayer(compactdisc);
}

此时配置类的代码为:

package soundsystem.javaconfig;

import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;

@configuration
public class cdplayerconfig {
    @bean
    //@bean(name = "lonelyheartsclub")
    public compactdisc sgtpeppers() {
        return new sgtpeppers();
    }

    /*@bean
    public cdplayer cdplayer() {
        return new cdplayer(sgtpeppers());
    }*/

    @bean
    public cdplayer cdplayer(compactdisc compactdisc) {
        return new cdplayer(compactdisc);
    }
}

3.验证bean是否装配成功

新建测试类cdplayertest:

package soundsystem.javaconfig;

import org.springframework.context.applicationcontext;
import org.springframework.context.annotation.annotationconfigapplicationcontext;

public class cdplayertest {
    public static void main(string[] args) {
        applicationcontext applicationcontext = new annotationconfigapplicationcontext(cdplayerconfig.class);
        compactdisc compactdisc = (sgtpeppers) applicationcontext.getbean("sgtpeppers");
        compactdisc.play();

        cdplayer cdplayer = applicationcontext.getbean(cdplayer.class);
        cdplayer.play();
    }
}

运行结果:

Spring入门(三):通过JavaConfig装配bean

从运行结果可以看出,bean装配成功。

4.源码地址

https://github.com/zwwhnly/springstudydemo.git,欢迎大家下载,有问题可以多多交流。