spring 中@Scope注解

Scope,也称作用域,在Soring Ioc容器指其创建的Bean对象对其他Bean对象的请求可见范围,在Spring IoC 容器中具有以下几种作用域:
①、基本作用域(singleton,prototype)
②、web作用域(request,session,globalsession)
③、自定义作用域
代码示例

public class ColorBean {
}

@Configuration
public class ColorConfiguration {
    @Bean
    @Scope
    public ColorBean colorBean(){
       return new ColorBean();
    }
}
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class JuniterTestColor {
    @Test
    public  void testImportBean(){
        AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(ColorConfiguration.class);
        ColorBean object1=(ColorBean)annotationConfigApplicationContext.getBean("colorBean");
        ColorBean object2=(ColorBean)annotationConfigApplicationContext.getBean("colorBean");
        log.info("object1的hashCode"+object1.hashCode());
        log.info("object2的hashCode"+object2.hashCode());
        log.info("两个对象是否相同"+(object1==object2));
    }
}

当使用@Scope默认的singleton的时候输出结果:

2020-04-11 12:41:04.687  INFO 103152: object1的hashCode853913427
2020-04-11 12:41:04.688  INFO 103152 : object2的hashCode853913427
2020-04-11 12:41:04.688  INFO 103152 : 两个对象是否相同true

@Scope(“prototype”)的时候输出结果

2020-04-11 12:49:37.690  INFO 103268 : object1的hashCode50058128
2020-04-11 12:49:37.691  INFO 103268: object2的hashCode23507230
2020-04-11 12:49:37.691  INFO 103268 : 两个对象是否相同false

总结:
基本作用域
①、当在使用singleton定义bean的时候,我们在容器获取到bean为同一个实体对象
②、我们使用prototype定一个bean的时候,我们从spring容器中获取到不是同一个类

如果不指定Bean的作用域,Spring默认使用singleton作用,java在创建实例是,需要进行内存申请,销毁实例时,需要完成垃圾回收,这些工作都会导致系统开销增加。因此,prototype作用域Bean的创建,销毁的代价比较大,从而singleton作用域的Beans实例一旦创建成功,可以重复的使用,因此,除非必要,否则尽量避免将Bean被设置成prototype作用域。
在web中
①、request:对于每次HTTP请求,使用request定义的Bean都将产生一个新实例,即每次HTTP请求将会产生不同的Bean实例。只有在Web应用中使用Spring时,该作用域才有效

②、session:对于每次HTTP Session,使用session定义的Bean都将产生一个新实例。同样只有在Web应用中使用Spring时,该作用域才有效

③、globalsession:每个全局的HTTP Session,使用session定义的Bean都将产生一个新实例。典型情况下,仅在使用portlet context的时候有效。同样只有在Web应用中使用Spring时,该作用域才有效

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值