美文网首页
单例模式

单例模式

作者: 简单的活着_ | 来源:发表于2018-11-12 18:45 被阅读0次

    默认情况下,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注入同一个实例,而不会在去创建另一个相同的实例对象。

    相关文章

      网友评论

          本文标题:单例模式

          本文链接:https://www.haomeiwen.com/subject/gjncfqtx.html