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

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

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

相关文章

变压器符号_行输出变压器的结构、符号及电路分析

行输出变压器又称逆程变压器、回扫变压器,俗称行输出,它是电视机、显示器中的一个重要变压器。1.行输出变压器结构行输出变压器的全部绕组和高压整流管均密封在其中,底部引出各个绕组的引脚,高压输出采用高压引线直接送至显像管的…

西南医院微服务咋查得到_#全国最好医院排行榜#发布:成都这4家牛了!四川31个专科排全国前十(总榜)...

病急不能乱投医!近日,一年一度、令人期待的——复旦版《2018年度中国医院排行榜(总榜)》全新揭晓了~这份榜单不仅是是中国医院学科建设的一个标杆也是大众疑难杂症寻找好医院的重要参考四川4家医院入百强!华西全国第二…

jit 和 jvm_关于JVM和JIT的一点点

jit 和 jvm如您所知,JVM(Java Virtusal Machine)使Java能够遵循“一次写入,随处运行”的范例。 JVM的核心包括以下组件: 堆 叠放 PermGen和方法区域 JIT编译器 代码缓存 堆是在应用程序代码开发阶段为您使用的每…

voxelnet_ue4商城资源Voxel Sandbox Toolkit体素沙盒工具箱

Unreal Engine虚幻游戏引擎素材资源 Unreal Engine Marketplace –Voxel Sandbox Toolkit体素沙盒工具箱体素沙盒工具箱是一个新的改进版本的体素生成从2016年适应4.22的需要。它用不同类型的立方体、树和拾取网格生成无限世界。因为额外的代码实现比以前的版本快得多。理想的创…

Pub / Sub本地模拟器

发布/订阅是GCP提供的不错的工具。 它非常方便,可以帮助您解决应用程序可能面临的消息传递难题。 实际上,如果您使用GCP,则可以使用托管消息解决方案。 如预期的那样,使用实际的发布/订阅解决方案需要一定的配额,因此…

mysql 写入随机字中文符_MySQL产生随机字符

MySQL产生随机字符UUID简介UUID含义是通用唯一识别码 (Universally Unique Identifier),这是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部份…

mysql建表时外检怎么创建_MySQL创建表时加入的约束以及外键约束的的意义

1,创建表时加入的约束a) 非空约束,not nullb) 唯一约束,uniquec) 主键约束,primary keyd) 外键约束,foreign key1,非空约束,针对某个字段设置其值不为空,如:学生的姓名不…

minecraft_MineCraft和堆外内存

minecraft总览 MineCraft是一个很好的例子,说明何时使用堆外内存确实可以提供帮助。 关键要求是: 保留的数据大部分是一个简单的数据结构(在Minecraft的情况下,其很多字节[]) 堆外内存的使用可以隐藏在抽象中。 考试…

win2008 mysql_mysql5.7.17在win2008R2的64位系统安装与配置实例

脚本之家已经给大家讲解过MYSQL其他版本在各种环境中的安装过程,大家可以参阅正文下面的相关文章,今天一起来学习下mysql5.7.17的实例安装教学,配置上稍微不同,希望能够帮助到你。安装MySql操作系统:Windows Server 20…

结构性错误

团队成员在使用以下代码时遇到了麻烦: void extractData(String targetUri) { Path tempFile createTempFilePath(); extractDataToPathAndUpload(tempFile, targetUri); cleanUp(tempFile); } void extractDataToPathAndUpload(Path tempFile, String targetUr…

mysql小计_使用SQL实现小计,合计以及排序_MySQL

bitsCN.com--说明:个人学习笔记,实现小计合计显示,分组按BANK_IDOP_DATE升序排序--测试数据CREATE TABLE #TB(ID VARCHAR(10),BANK_ID VARCHAR(10),OP_DATE VARCHAR(10),OPERATOR_NO VARCHAR(20),AMT DECIMAL(10,2))INSERT #TB SELECT 1111,0…

mysql函数封装_PHP访问MYSQL数据库封装类(附函数说明)

/*MYSQL 数据库访问封装类MYSQL 数据访问方式,php4支持以mysql_开头的过程访问方式,php5开始支持以mysqli_开头的过程和mysqli面向对象访问方式,本封装类以mysql_封装数据访问的一般流程:1,连接数据库 mysql_connect or mysql_pco…

mule和activemq_Mule ESB,ActiveMQ和DLQ

mule和activemq在本文中,我将展示一个简单的Mule ESB流程,以了解实际中使用的Active MQ 的DLQ功能 。 我假设您有一个正在运行的Apache ActiveMQ实例(如果没有,则可以在此处下载一个版本)。 在此示例中,我…

MySQL倒序如何避免filesort_如何避免mysql查询的filesort?

我用不同的参数使用这种查询:EXPLAIN SELECT SQL_NO_CACHE ilan_genel.id , ilan_genel.durum , ilan_genel.kategori , ilan_genel.tip , ilan_genel.ozellik , ilan_genel.m2 , ilan_genel.fiyat , ilan_genel.baslik , ilan_genel.ilce , ilan_genel.parabirimi …

在Java中键入Safe SQL

字符串,字符串,字符串 无论您使用的是JPA , MyBatis还是Spring Data JDBC之类的框架,最终都将SQL语句声明为Java String。 这种方法的问题在于,您必须为每个语句编写测试,以确保它甚至是有效的SQL。 没有编…

springmvc怎么设置更改了界面不用重启_Microsoft Visual Studio 2019 更改语言包

第一次写文章,如有格式等问题,请多多包含与指点!很多人在编程时更喜欢英文界面,认为与编程语言具有相同的语境,更顺手。但是,在更改环境显示语言时,可能会遇到一些障碍,例如我之前在…

苹果电脑怎么删除软件_误格式化,删除文件怎么恢复?3款最好用的数据恢复软件推荐...

1、EasyRecovery一款威力非常强大的硬盘数据恢复工具,能够恢复丢失的数据以及重建文件系统。主要体现在可以从被病毒破坏或是已经格式化的硬盘中恢复数据。EasyRecovery在使用过程中不会在原始的驱动器中写入任何东西,其主要是在内存中重建文件分区表使数…

设计模式 生成器_生成器设计模式的应用

设计模式 生成器嗨,您好! 今天,我将分享我制作的全新设计模式系列的第一个。 构建器设计模式是开发严肃的应用程序时非常有用且通用的模式。 在这篇文章中,我将提供一个很小的构建器模式框架,因此您随时可以回到这里并…

mysql增加sort_buffer_设置sort_buffer_size

sort_buffer_sizemysql> show variables like ‘%sort_buffer_size%’;————————-———| Variable_name | Value |————————-———| innodb_sort_buffer_size | 1048576 || myisam_sort_buffer_size | 8388608 || sort_buffer_size | 262144 |———————…

先发帖

通常,我们编写代码来计算出一堆可用的答案。 让我们看看Java中的情况。 public Widget getAppropriateWidget(CustomerRequest request) { if (shelfstock.contains(request.getBarcode()) { return new ShelfWidget(); } if (backroomStock.contains(request.getBa…