定义/作用

用于指定单例bean实例化的时机,在没有指定此注解时,单例会在容器初始化时就被创建。而当使用此注解后,单例对象的创建时机会在该bean在被第一次使用时创建,并且只创建一次。第二次及以后获取使用就不再创建。

在实际开发场景中,并不是所有bean都要一开始就被创建的,有些可以等到使用时才创建。此时就可以使用该注解实现。

此注解只对单例bean有用,原型bean时此注解不起作用。

源码:

//可以作用在类上、方法上、构造器上、方法参数上、成员变量中。
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Lazy {//是否延迟加载,默认是,如果设置为false,那跟不使用该注解一样。boolean value() default true;
}

@Lazy注解作用于类上时,通常与@Component及其衍生注解配合使用。
@Lazy注解作用于方法上时,通常与@Bean注解配合使用。

//与@component配合使用
@Component
@Lazy
public class UserService {public UserService(){System.out.println("userService创建了");}
}@Configuration
@ComponentScan(basePackages = "lazyDemo")
public class SpringConfig {@Bean@Lazy//与@Bean注解配合使用public UserService userService1(){return new UserService();}
}public class TestLazyDemo {private AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);@Testpublic void testLazyDemo() throws SQLException {System.out.println("容器初始化完成");UserService userService = (UserService) context.getBean("userService");UserService userService1 = (UserService) context.getBean("userService1");}
}

结果:

分析:
如果是立即加载的bean的话,下面那两条语句应该先打印出来,如果是延迟加载的bean的话,会在第一次使用,getBean的时候创建。也可以打断点测试。

Spring高级之注解@lazy详解(超详细)相关推荐

  1. Spring高级之注解@Bean详解(超详细)

    定义/作用 当我们要使用第三方类实现组件注册到IOC容器时,例如第三方数据库连接池等,我们无法修改他们的代码,所以我们不能通过@Component及其衍生注解来进行组件定义.这是,可以通过@Bean注 ...

  2. Spring高级之注解@ComponentScan详解(超详细)

    定义/作用 @ComponentScan注解用于实现spring主键的注解扫描,会扫描特定包内的类上的注解. 源码(对属性进行一些简介,会在后文中详细讲解每个属性): @Retention(Reten ...

  3. Spring高级之注解@PropertySource详解(超详细)

    定义/作用 @PropertySource注解用于指定资源文件读取的位置,它不仅能读取properties文件,也能读取xml文件,并且通过YAML解析器,配合自定义PropertySourceFac ...

  4. Spring高级之注解@DependsOn详解(超详细)

    定义/作用 @DependsOn注解可以定义在类和方法上,意思是我这个组件要依赖于另一个组件,也就是说被依赖的组件会比该组件先注册到IOC容器中. 使用场景: 需要用到观察者模式的情况下通常都需要用到 ...

  5. Spring 3.0 注解注入详解

    Spring 3.0 注解注入详解 2011-04-15 09:44 17ZOUGUO ITEYE博客 我要评论(1) 字号:T | T AD: 一.各种注解方式 1.@Autowired注解(不推荐 ...

  6. Java 泛型详解(超详细的java泛型方法解析)

    Java 泛型详解(超详细的java泛型方法解析) 1. 什么是泛型 泛型:是一种把明确类型的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型.也就是说在泛型使用过程中,操作的数据类型被指定为 ...

  7. spring : springmvc常用注解标签详解(转)

    新的项目,新的学习,好久没用这些注解了,同时在学习使用shiro ,lucene 等等.在网上找了些博文,感谢作者的总结和分享. 欢迎交流,言归正传: 1.@Controller 在SpringMVC ...

  8. @Autowired注解详解——超详细易懂

    @Autowired详解 要搞明白@Autowired注解就是要了解它是什么?有什么作用?怎么用?为什么? 首先了解一下IOC操作Bean管理,bean管理是指(1)spring创建对象 (2)spr ...

  9. 斜率优化详解(超详细, 有图有代码有注释)

    文章目录 斜率优化引入 从例题开始 斜率优化Part 1: 推为斜率式 斜率优化Part 2: 合法点集的斜率单调性 Part 3: 找到最优决策点 Part 4: 斜率优化大流程 Part 5: 斜 ...

最新文章

  1. 用VS2010构建MASM的编程环境
  2. 手写汉字笔迹识别模型汇总
  3. Python数据结构与算法—队列
  4. MobileNet_v2
  5. shell技巧之以逆序形式打印行
  6. 维护一套同时兼容 iOS 6 和 iOS 7,并且能够自动适应两个系统的 UI 风格的代码...
  7. 英语对计算机人才的重要性,英语对计算机专业的重要性及如何提高英语水平
  8. Vulnhub靶场渗透练习(二) Billu_b0x
  9. bzoj2462 [BeiJing2011]矩阵模板 hash
  10. 深度学习前人精度很高了怎么创新?
  11. 前端在linux中常用的命令,前端在SSH上常用的Linux命令
  12. JVM(三)——类结构与类加载器
  13. Java项目经验相关常见面试题
  14. 经典卷积神经网络——VGG16
  15. 微信公众号:我们可以用它来干什么?
  16. 地壳中元素含量排名记忆口诀_地壳中元素含量_地壳中元素含量口诀
  17. 九章量子计算机属于专用计算机吗,九章“问世”了 你知道什么是量子计算机吗?...
  18. 基于开源软件,“核高基”软件战略必定失败
  19. 美图DPOS以太坊教程(Docker版)
  20. 渲染树(render树)是什么?

热门文章

  1. Java案例:装载与发射子弹问题
  2. 【BZOJ3566】概率充电器,树形概率DP
  3. 2017.9.5 能量采集 思考记录
  4. 【英语学习】【Daily English】U07 Restaurant L04 It's on me today.
  5. 倪文迪陪你学蓝桥杯2021寒假每日一题:1.11日(2017省赛A第9题)
  6. android svg指纹录取动画_你知道几种前端动画的实现方式?
  7. 计算机十进制例子,verilog给你举个最简单的例子:以十进制计算为例:14
  8. 学生使用计算机违纪处理,软件学院违纪学生跟踪教育管理办法
  9. python操作mongodb数据库-删除集合、集合数据
  10. HLSL编译工具—FXC