博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring入门(三):通过JavaConfig装配bean
阅读量:6325 次
发布时间:2019-06-22

本文共 3165 字,大约阅读时间需要 10 分钟。

上一篇博客中,我们讲解了使用组件扫描和自动装配实现自动化装配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;@Configurationpublic class CDPlayerConfig {}复制代码

2.声明bean

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

package soundsystem.javaconfig;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic 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构造器的参数依赖:

@Beanpublic CDPlayer cdPlayer() {    return new CDPlayer(sgtPeppers());}复制代码

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

@Beanpublic CDPlayer cdPlayer(CompactDisc compactDisc) {    return new CDPlayer(compactDisc);}复制代码

此时配置类的代码为:

package soundsystem.javaconfig;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic 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();    }}复制代码

运行结果:

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

4.源码地址

,欢迎大家下载,有问题可以多多交流。

转载于:https://juejin.im/post/5c7f900cf265da2d8d6a03ac

你可能感兴趣的文章
【云周刊】第212期:发布SaaS加速器:我们不做SaaS,我们只做SaaS生态的推进者和守护者...
查看>>
企业级性能、安全可靠 阿里云发布企业级大数据平台开发者版
查看>>
发力1小时到家服务,山姆与京东到家共建前置仓获10倍坪效、60%月复购率
查看>>
苹果又挖VR界大牛,这次是Jaunt 的创始人
查看>>
【直播回顾】云栖社区特邀专家蒋泽银:Jpom一款低侵入式Java运维、监控软件...
查看>>
CefSharp中ChromiumWebBrowser打开新页面处理(_blank)
查看>>
解决ipad连接不上电脑的问题
查看>>
全球数字化报告 2019 发布:每 11 秒产生一位网络新人
查看>>
Kubernetes(六) - Secret和私有仓库认证
查看>>
DBeaver 社区版 6.0.2 发布,可视化数据库管理平台
查看>>
jQuery自定义右键菜单
查看>>
分布式工具的一次小升级⏫
查看>>
云创大数据亮相第四届中国-亚欧安博会
查看>>
为用户安全着想,The Void把VR硬件做成了安全帽
查看>>
“RESOURCE MONITOR“CPU占用特别高
查看>>
机器人可以比人类优秀,那未来会替代人类吗?
查看>>
Linux-(tar,gzip,df,du)
查看>>
Android开发之蓝牙操作
查看>>
前后端分离的思考与实践(四)
查看>>
获取网卡IP地址命令
查看>>