spring 注释_Spring@懒惰注释

spring 注释

介绍:

默认情况下, Spring框架在应用程序启动时加载并热切初始化所有bean。 在我们的应用程序中,我们可能有一些非常消耗资源的bean。 我们宁愿根据需要加载此类bean。 我们可以使用Spring @Lazy批注实现此目的

在本教程中,我们将学习如何使用@Lazy注释延迟加载我们的bean。

延迟初始化:

如果我们用@Lazy注释标记我们的Spring配置类,则所有带有@Bean注释的已定义bean都会被延迟加载:

 @Configuration  @ComponentScan (basePackages = "com.programmergirl.university" )  @Lazy  public class AppConfig {  @Bean public Student student() { return new Student(); }  @Bean public Teacher teacher() { return new Teacher(); }  } 

我们还可以通过在方法级别使用此注释来延迟加载单个bean:

 @Bean  @Lazy  public Teacher teacher() { return new Teacher();  } 

测试延迟加载:

让我们通过运行应用程序来快速测试此功能:

 public class SampleApp { private static final Logger LOG = Logger.getLogger(SampleApp. class ); public static void main(String args[]) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig. class );         LOG.info( "Application Context is already up" );  // Beans in our Config class lazily loaded Teacher teacherLazilyLoaded = context.getBean(Teacher. class ); Student studentLazilyLoaded = context.getBean(Student. class ); }  } 

在控制台上,我们将看到:

 Bean factory for ...AnnotationConfigApplicationContext:  ...DefaultListableBeanFactory: [...]  ...  Application Context is already up  Inside Teacher Constructor  Inside Student Constructor 

显然, Spring在需要时而不是在设置应用程序上下文时初始化了StudentTeacher Bean。

使用

我们还可以在注入点使用@Lazy批注:构造函数,setter或字段级。

假设我们要延迟加载一个Classroom类:

 @Component  @Lazy  public class Classroom { public Classroom() { System.out.println( "Inside Classroom Constructor" ); } ...  } 

然后通过@Autowired注释将其连接到University bean:

 @Component  public class University {  @Lazy @Autowired private Classroom classroom;  public University() { System.out.println( "Inside University Constructor" ); }  public void useClassroomBean() { this .classroom.getDetails(); ... }  } 

在这里,我们懒惰地注入了Classroom bean。 因此,在实例化University对象时,Spring将创建代理Classroom对象并将其映射到该对象。 最后,只有当我们调用useClassroomBean()时 ,它才会创建实际的Classroom实例:

 // in our main() method  AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();   LOG.info( "Application Context is already up" );   University university = context.getBean(University. class );  LOG.info( "Time to use the actual classroom bean..." );  university.useClassroomBean(); 

上面的代码将产生以下日志:

 Bean factory for ...AnnotationConfigApplicationContext: ...DefaultListableBeanFactory: [...] ...  Inside University Constructor  ...  Application Context is already up  Time to use the actual classroom bean...  Inside Classroom Constructor 

如我们所见, Classroom对象的实例化被延迟,直到其实际需要为止。

请注意,对于延迟注入,我们必须在组件类以及注入点上都使用@Lazy批注。

结论:

在本快速教程中,我们学习了如何延迟加载Spring Bean。 我们讨论了延迟初始化和延迟注入。

翻译自: https://www.javacodegeeks.com/2019/09/spring-lazy-annotation.html

spring 注释

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332015.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

管理系统的账户设计(涉及注册/登录逻辑)

文章目录方案一方案二方案三方案一 类似华为云IAM(Identity and Access Management 身份和访问管理)用户,阿里云的 RAM(Resource Access Management 资源访问管理)用户 机构有独立的账户(主账户&#xff…

opencv生成日志_OpenCV-Utils学习日志:VideoCapture使用样例

1.VideoCapture可以打开多种来源的数据流,但常见的是相机、视频及图像序列三类数据流:(1)打开相机数据流,需要指定相机在主机上的设备编号,若主机上只有一个相机则编号通常是0。(2)打开视频数据流,需要指定视频的完整路…

jdbc查询序列_JDBC –模拟序列

jdbc查询序列也许我们每个人在程序员的生活中至少遇到过一次这个问题- 如何模拟数据库序列? 在下面,您可能会发现我对该问题解决方案的各种了解。 假设我们有一个接口定义了所需的API,用于返回整数序列: public interface Sequen…

利用 GregorianCalendar 制作当前月的月历

【0】README 0.1)本文文字总结于 core java volume 1 , 源代码均为原创; 0.2)本文旨在熟悉 GregorianCalendar 日历类,每一天就是一个GregorianCalendar 日历类,一天有很多的日历属性,觉得用它…

pyecharts怎么绘制散点图_PyeCharts绘制各种图形

简介PyeCharts 是一个用于生成 Echarts 图表的类库,用其生成的图可视化效果非常棒,而且使用起来非常简单。下面是一些常用图的pyecharts实现方法柱状图bar pye.Bar("柱状图")#新建柱状图bar.add("服装", #图例名称["衬衫"…

junit junit_穿越JUnit流

junit junit关于JUnit 5迁移的好处之一是,您可以在老式模式下运行JUnit 4测试,并且所有内容仍然兼容。 不利的一面是,某些注释和方法在JUnit 4和JUnit 5中具有相同的名称,并且当两组库依赖项都可用时,很容易导入错误的…

被遗忘的软件产品形态

从2010年以后,很多公司开发的软件产品,很少有客户端了,web2.0之后,主流的业务系统基本上都是基于Web去构建业务系统。这几年见到的业务应用系统都是基于Web的构建的。而在To C市场,几乎就没有客户端了,都是…

vue进行判断使用class_vue判断dom的class

vue点击给dom添加class然后获取含有class的dom{{item.name}}{{item2.name}}jschek(index2, index) {this.iac[index2] indexthis.iac this.iac.concat([]);this.checkchose()},checkchose:function(){var chosethisvar chosedomchose.$refs.choseboxconsole.log(chosedom)for…

方法参数的值调用+引用调用+深浅拷贝

【0】README 0.1)本文描述源代码均 转自 core java volume 1, 旨在理清值调用引用调用; 【1】参数传递给方法的专业术语: 1.1)值调用:它表示方法接收的是调用者提供的值; 1.2)引用…

设计模式 工厂方法_工厂方法设计模式

设计模式 工厂方法工厂方法模式是流行的创作设计模式之一。 它并不特别依赖于工厂对象来创建对象。 而是要在同一类中使用单独的方法来创建对象。 Factory Method模式定义了一个用于创建对象的接口,但是让子类决定如何实例化其对象。 每个子类必须定义其Factory方法…

靖江机器人怎么样_铁饭碗不保?靖江可能消失的12大职业!快看有你的工作没?...

原标题:铁饭碗不保?靖江可能消失的12大职业!快看有你的工作没?无人飞机、无人驾驶、智能机器人....你能想象这些充满现代感的高科技正在改变我们的生活吗?在科技高速发展的今天人工智能逐渐能够代替人类的部分工作但&a…

MarkdownPad 汉化破解(含下载地址)

转自 http://jingyan.baidu.com/article/ca41422fe209271eaf99ed7c.html MarkdownPad是一个全功能Markdown编辑器的Windows。 【1】MarkdownPad 汉化破解(含下载地址) 工具/原料 MarkdownPad 2.4 方法/步骤 软件 下载地址(本软件为绿色版…

捡对象引流脚本 内容_对象和索引流

捡对象引流脚本 内容我本来要写一篇关于如何将流与每个元素的索引混合的文章,但是Baeldung上的人们已经很好地涵盖了这个主题 ! 鉴于我是他们编辑团队的一员,我为他们/我们感到自豪。 有趣的是,特别是Streams中的Java函数式编程如…

散列之再散列

【0】README 0.1)本文描述总结于 数据结构与算法分析, 但源代码为原创; 0.2)为什么写这篇博文? 再散列的代码实现 包括了 解决冲突的方法实现;很有代表性;(本源代码采用的解决冲突…

激活策略 查询_5个提问,详细介绍北极星指标的策略框架

北极星指标(North Star Metric)已经逐渐成为许多公司指导产品发展的重要指标,本文通过五个设问和多个行业案例,系统性地介绍北极星指标这类产品策略框架。如今有非常多的人在谈论和使用北极星指标(North Star Metric&a…

变色龙嗅探卡功能_变色龙功能

变色龙嗅探卡功能在《神秘博士》中,卡梅利恩(Kamelion)角色是一个可以采取任何形式的机器人。 据称,他们使用的物理道具非常麻烦,只有其创建者才能理解,而该创建者并没有帮助纠正它。 因此,Cha…

老人与海好词100英文带翻译_《老人与海》经典语录(英文+译文)

《老人与海》是海明威于1951年在古巴写的一篇中篇小说,于1952年出版。是海明威最著名的作品之一。它围绕一位老年古巴渔夫,与一条巨大的马林鱼在离岸很远的湾流中搏斗而展开故事的讲述。它奠定了海明威在世界文学中的突出地位,这篇小说相继获…

java多态+多态中隐含的问题

【0】RAEDME 0.1)本文总结于 core java volume 1, 感觉多态中存在的这个问题很新颖,故分享之; 【1】继承与is-a法则 1.1)有一个用来判断是否应该设计为继承关系的规则: 这就是 is-a 规则, 它…

MacOS命令终端(CMD)的快捷键/终端快捷键

文章目录常用删除清屏复制粘贴交互/撤销移动光标查找历史命令使用命令查看历史命令标签页控制命令滚屏常用 快捷键说明Control A跳到本行的行首Control E跳到本行的行尾Control U删除光标前面(左侧)的所有文字(还有剪切功能)&…

apache kafka_使用Apache Kafka,Kubernetes和Envoy,Istio,Linkerd的服务网格和云原生微服务...

apache kafka微服务架构不是免费的午餐 ! 微服务需要解耦,灵活,操作透明,数据感知和弹性。 过去几年的大多数材料仅讨论具有紧密耦合且不可扩展的技术(如REST / HTTP)的点对点体系结构。 这篇博客文章介绍了…