博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring自动化装配bean
阅读量:6924 次
发布时间:2019-06-27

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

1. 场景

用CD(Compact disc)和CD播放器(CDPlayer)阐述DI(依赖注入)。

如果不将CD插入(注入)到CDPlayer中,那么CDPlayer其实没有太大的用处,所以,可以这样说:CDPlayer依赖于CD才能完成它的使命。

回到顶部

2. 架构图示

回到顶部

3. 代码

接口: CompactDisc.java

package soundsystem;public interface CompactDisc {  void play();}

接口: MediaPlayer.java

package soundsystem;public interface MediaPlayer {  void play();}

SgtPeppers.java

package soundsystem;import org.springframework.stereotype.Component;@Componentpublic class SgtPeppers implements CompactDisc {  private String title = "Sgt. Pepper's Lonely Hearts Club Band";    private String artist = "The Beatles";  @Override  public void play() {    System.out.println("Playing " + title + " by " + artist);  }  }

:SgtPeppers类上使用了@Component注解。这个简单的注解表明该类会作为组件类,并告知Spring要为这个类创建bean

CDPlayer.java

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;@Componentpublic class CDPlayer implements MediaPlayer {  private CompactDisc cd;  @Autowired  public CDPlayer(CompactDisc cd) {    this.cd = cd;  }  @Override  public void play() {    cd.play();  }}

 

不过,组件扫描默认是不启用的,我们还需显式配置一下Spring,从而命令它去寻找带有@Component注解的类,并未其创建bean。下例中使用了@ComponentScan注解,这个注解能够在Spring中启用组件扫描。如没有其他配置,@ComponentScan默认会扫描与配置类相同的包:soundsystem

CDPlayerConfig.java

package soundsystem;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;@Configuration@ComponentScanpublic class CDPlayerConfig { }

 

测试CDPlayerTest.java

package soundsystem;import static org.junit.Assert.*;import org.junit.Test;import org.junit.contrib.java.lang.system.StandardOutputStreamLog;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(classes=CDPlayerConfig.class)public class CDPlayerTest {  @Autowired  private MediaPlayer player;    @Autowired  private CompactDisc cd;    @Test  public void cdShouldNotBeNull() {    assertNotNull(cd);  }  @Test  public void play() {    player.play();  }}

 自动装配就是让Spring自动满足bean依赖的一种方法,在满足依赖的过程中,会在Spring应用的上下文中寻找匹配某个bean需求的其他bean。为了声明要进行自动装配,我们借助Spring的@Autowired注解。

上述代码中,在构造器中添加了@Autowised注解,这表明当Spring创建CDPlayer bean的时候,会通过这个构造器来进行实例化,并传入一个可设置为CompactDisc类的bean,在上面的代码中,SgtPeppers被声明为组件,并实现了CompactDisc接口。因此,在实际运行中会把SgtPeppers作为实例化类。

      本文转自zsdnr  51CTO博客,原文链接:http://blog.51cto.com/12942149/1932759,如需转载请自行联系原作者

你可能感兴趣的文章
我的友情链接
查看>>
XCode快捷键
查看>>
zookeeper错误:KeeperErrorCode = NoChildrenForEphemerals的原因
查看>>
istio-0.8 路由权重设置
查看>>
springmvc数据绑定
查看>>
安装yii2
查看>>
LVS负载均衡之session解决方案 持久连接
查看>>
在商业计算中我们要用java.math.BigDecimal
查看>>
Android基于XMPP Smack Openfire下学习开发IM(五)连接断开重连
查看>>
网络瘫痪分析处理(午饭的一个例子)
查看>>
cisco3750交换机物理端口配置IP地址
查看>>
数据库查询性能需注意几点
查看>>
6 个重构方法可帮你提升 80% 的代码质量
查看>>
[转载]JQUERY的父,子,兄弟节点查找方法
查看>>
10.23 linux任务计划cron 10.24 chkconfig工具 10.25 system
查看>>
正式教你控制win7的任务管理器显示的内容
查看>>
linux--mkfs-tune2fs-mount笔记@1
查看>>
CDN的实现原理
查看>>
lamp环境下论坛的实现
查看>>
Hibernate对象3种状态转变关系
查看>>