【Spring注解】@Scope和@Lazy

文章目录


源码:https://github.com/nieandsun/spring-study

1.@Scope

注意:
(1) spring默认情况下创建对象是单实例的
(2) 单实例:创建IOC容器的时候实例bean就被创建了
(3)多实例: 仅当bean被使用的时候才创建

主要用法如下:

@Configuration
public class C06Config1 {
    /**
     * 没有@Scope/有@Scope后面什么都不写/或 @Scope("singleton"):
     *    单实例(默认)---IOC容器启动的时候会调用方法创建对象并放到IOC容器中,
     *    以后每次获取的就是直接从容器中拿(大Map.get)的同一个bean
     *
     * prototype:
     *     多实例---IOC容器启动的时候,IOC容器启动并不会去调用方法创建对象,
     *     而是每次获取的时候才会调用方法创建对象
     *
     *
     * request: 主要针对web应用, 递交一次请求创建一个实例
     * 
     * session:同一个session创建一个实例
     *
     * @return
     */
    @Bean
    // @Scope(value = "singleton") //这样也可以
    @Scope("singleton")
    public Cup06 cup06() {
        return new Cup06();
    }
}

2.@Lazy

注意:
懒加载针对的是单实例bean


懒加载只是容器启动的时候不会创建对象,而是第一次被使用的时候进行创建


但当对象创建完成后,就和非懒加载的bean一样都被放到spring容器里了,之后再使用就和其他单实例bean一样直接去spring容器中去拿了

测试用例即结论如下:

  • 配置类
@Configuration
public class C06Config2 {
    /**
     *  非懒加载: 主要针对单实例bean,默认在容器启动的时候创建对象
     *
     * 	懒加载:容器启动时候不创建对象, 仅当第一次使用(获取)bean的时候才创建被初始化
     * 	       之后就和其他单实例bean一样直接去spring容器中去拿了
     * @return
     */
    @Bean
    //@Lazy(value = false)
    @Lazy(false)
    //@Lazy
    public Cup06 cup06() {
        System.out.println("向spring容器中添加cup06类");
        return new Cup06();
    }
}
  • 启动类
    @Test
    public void test02() {
        AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(C06Config2.class);
        System.out.println("spring容器初始化完成");
        Cup06 cup061 = (Cup06) ac.getBean("cup06");
    }

如果有@Lazy或@Lazy(true)或@Lazy(value = true)时运行结果如下:
在这里插入图片描述
如果没有@Lazy或者@Lazy(false)或者@Lazy(value = false)时运行结果:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值