我使用了@Scope(“prototype”),为什么测试结果还是单例的

来源:4-7 Spring Bean装配之基于Java的容器注解说明——@Bean和@Scope

蓝烟amber

2017-06-16 13:33

@Bean
@Scope(scopeName="prototype")
public Store stringStore(){
   return  new StringStore();
}


@Test
public void test12() {
   for(int i=0;i<2;i++){
       StringStore store = super.getBean("stringStore");
       System.out.println(store.getClass().hashCode());
   }
}



输出了两个同样的hashcode。



写回答 关注

6回答

  • qq_匿名者_911
    2017-06-16 16:25:14
    已采纳

    @Scope(scopeName="prototype") 这行代码修改成@Scope("prototype")即可

    蓝烟ambe...

    并没有什么用,这种只是简化写法,本质上跟我题目中的是一样的。

    2017-06-16 16:35:13

    共 1 条回复 >

  • 潇潇小饭
    2018-08-24 08:13:21

    在一个类中,通过多次访问这个对象的时候,HashCode总是一样的,但是如果在两个类中一用这个对象,然后分别这两个类中的引用

    TestScope这个对象,则在控制台上输出的HashCode就不一样了;但是如果把@Scope("prototype")去掉,则哪怕是在两个类中打印的这两个hashCode也是一样的;还有一点就是如果类上面加有@Scope("prototype")注释,这个时候如果是两个用户登陆访问引用TestScope这个类的时候,打印出的TestScope的hashCode也是一样的。


  • 那个怪蜀黍是谁额
    2018-06-15 10:37:53

    不是应该用

    @Scope(name="prototype")

    么?

  • 稻子凡
    2017-09-03 21:45:36

    输出的是store.getClass().hashCode(),要store.hashCode()才会不一样

  • 慕用3394797
    2017-08-07 18:48:35

    为什么 》???

  • 蓝烟amber
    2017-06-16 19:19:23

    是我最后写错了!基础知识不扎实,╮(╯▽╰)╭

    qq_bab... 回复余渡_

    使用同一个controller,注入带有@Scope(scopeName="prototype")的service,​并不会产生多个service bean

    2018-06-07 10:58:20

    共 2 条回复 >

Spring入门篇

为您带来IOC和AOP的基本概念及用法,为后续高级课程学习打下基础

268787 学习 · 963 问题

查看课程

相似问题