单例模式

默认情况下,Spring中的bean都是单例 的 , 也就是说,由Spring管理的bean一旦被创建了,即使有很多其他的bean都依赖这个bean,Spring始终会把这个bean注入到与他相互依赖的bean中去。

代码:

@Component

public class SgtPeppers implements CompactDisc {

    private Stringtitle ="My title";

    private Stringartist ="My artist";

    public SgtPeppers(){

System.out.println("初始化SgtPeppers "+this.hashCode());

    }

@Override

    public void play() {

System.out.println("title "+title+","+"artist "+artist);

    }

}

@Component

public class CDPlayer implements MediaPlayer {

private CompactDisc cd;

   @Autowired

    public CDPlayer(CompactDisc cd) {

        System.out.println("MediaPlayer 的属性cd "+cd.hashCode());

        this.cd = cd;

    }

@Override

    public void play() {

        cd.play();

    }

}

测试:

@RunWith(SpringJUnit4ClassRunner.class)//

@ContextConfiguration(classes = CDPlayerConfig.class)//加载配置

public class CDPlayerTest {

    @Autowired

    private MediaPlayer mediaPlayer;

    @Autowired

    private CompactDisc  cd;

//    @Test

//    public void cdShouldNotBeNull(){

//        assertNotNull(cd);

//        cd.play();

//    }

    @Test

    public void play(){

mediaPlayer.play();

        assertEquals("log:",log.getLog());

    }

}

测试结果:

初始化SgtPeppers 1272123492

MediaPlayer 的属性cd 1272123492

可以看到 CDPlayer 构造器中的参数cd和测试类CDPlayerTest中mediaPlayer的cd属性的hashCode相同,说明Spring始终为这些依赖的bean注入同一个实例,而不会在去创建另一个相同的实例对象。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,841评论 18 139
  • 本章内容: 声明Bean 构造器注入和Setter方法注入 装配Bean 控制bean的创建和销毁 任何一个成功的...
    谢随安阅读 1,659评论 0 9
  • 前言 本文主要参考 那些年,我们一起写过的“单例模式”。 何为单例模式? 顾名思义,单例模式就是保证一个类仅有一个...
    tandeneck阅读 2,531评论 1 8
  • 第四章 校园禁区 大年初一,零点的钟声终于敲响,城市中的人们,欢呼着,拥抱着,迎接着新年的到来,而此时,在...
    华月琉璃阅读 335评论 0 1
  • 如果有一天,我变得没心没肺。请记得,我曾经善良过 如果有一天,我变得冷漠了。请记得,我曾经也被冷漠过 如果有一天,...
    星轨meme阅读 339评论 0 1