Spring Bean懒加载与非懒加载
- 懒加载:对象使用的时候才去创建。节省资源,但是不利于提前发现错误;
- 提前加载:容器启动时立马创建。消耗资源,但有利于提前发现错误
- Spring 默认设置是非懒加载
1,由于在controller中会注入service层的类,由于,controller层面上的spring-mvc不是懒加载,即当在controller中注入service时,就会初始化此service类。因此即调用到谁初始化谁
2,如果一个bean被设置为延迟初始化,而另一个非延迟初始化的singleton bean依赖于它,那么当ApplicationContext提前实例化singleton bean时,它必须也确保所有上述singleton 依赖bean也被预先初始化,当然也包括设置为延迟实例化的bean,即被非懒加载的bean依赖时也会被初始化。
3,ApplicationContext实现的默认行为就是在启动时将所有singleton bean提前进行实例化。提前实例化意味着作为初始化过程的一部分,ApplicationContext实例会创建并配置所有的singleton bean。通常情况下这是件好事,因为这样在配置中的任何错误就会即刻被发现(否则的话可能要花几个小时甚至几天)。
@Lazy @Scope(“prototype”) 实现懒加载
** Config.class **
package com.rumenz;import org.springframework.beans.factory.config.ObjectFactoryCreatingFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Scope;@Configuration
public class Config {@Bean("rumenza")public RumenzA rumenza(){return new RumenzA();}@Bean("rumenzb")//@Lazy@Scope("prototype")public RumenzB rumenzb(){return new RumenzB();}
}
** RumenzA.class **
package com.rumenz;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;public class RumenzA {public RumenzA() {System.out.println("RumenzA 无参构造方法");}}
** RumenzB.class **
package com.rumenz;public class RumenzB {public RumenzB() {System.out.println("RumenzB 无参构造方法");}}
** DemoApplication.class **
package com.rumenz;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class DemoApplication {public static void main(String[] args) {AnnotationConfigApplicationContext ac=new AnnotationConfigApplicationContext();ac.register(Config.class);ac.refresh();ac.getBean(RumenzB.class);}
}
** 输出 **
RumenzA 无参构造方法
RumenzB 无参构造方法 //只有调用的时候RumenzB才实例化
Spring Bean懒加载与非懒加载相关推荐
- 懒加载和预加载的区别_类的动态创建(ro,rw)amp; 懒加载类和非懒加载类底层加载的区别 amp; 类和分类的搭配分析...
黑客技术点击右侧关注,了解黑客的世界! Java开发进阶点击右侧关注,掌握进阶之路! Python开发点击右侧关注,探讨技术话题!作者丨OSMin链接:https://juejin.im/post/5 ...
- Spring Bean 的注入方式
DI 注入 一. 传统的注入方式 通过bean标签方式注入 通过包扫描的方式注入 二. 注解方式配置注入 @Configuration 与 @Bean 注解方式注入 @ComponentScan 包扫 ...
- spring bean的懒加载原理
spring bean的懒加载原理 1 普通的bean的 初始化是在初始化阶段开始执行的,而被lazy-init修饰的bean则是从容器第一次进行context.getbean("" ...
- java懒加载的原理_每天使用 Spring 框架,那你知道 lazy-init 懒加载原理吗?
普通的bean的初始化是在容器启动初始化阶段执行的,而被lazy-init修饰的bean 则是在从容器里第一次进行context.getBean("")时进行触发. Spring ...
- Spring系列(五):@Lazy懒加载注解用法介绍
今天给大家介绍@Lazy懒加载注解用法,希望对大家能有所帮助! 1.@Lazy 懒加载注解的概念 SpringIoC容器会在启动的时候实例化所有单实例 bean .如果我们想要实现 Spring 在启 ...
- 图片预加载与图片懒加载
图片预加载与图片懒加载 图片预加载 图片预加载主要是针对非icon类图片. 加载快,有良好的用户体验. 提前加载图片,当用户需要查看时可直接从本地缓存中渲染.可能因为图片很大,浏览器显示出它会用很长的 ...
- Spring bean加载多个配置文件
在一个大的项目结构,Spring bean配置文件位于不同的文件夹以便于维护和模块化.例如,Spring-Common.xml在common 文件夹中,Spring-Connection.xml 在c ...
- android预加载布局,Android 懒加载优化
目录介绍 1.什么是懒加载 1.1 什么是预加载 1.2 懒加载介绍 1.3 懒加载概括 2.实际应用中有哪些懒加载案例 2.1 ViewPager+Fragment组合 2.2 分析源码 3.Vie ...
- Spring框架如何加载和定义Spring Bean类?
本篇介绍什么是Spring Bean类,如何创建Bean类,以及如何将Bean类添加到Spring IOC容器.通过本篇的学习,可以达成如下目标. ● 认识Spring Bean类 ● 掌握Bean类 ...
最新文章
- springboot2稳定版本_重要版本Spring Boot 2.3.0发布 - spring.io
- Java 并发编程:Synchronized 及其实现原理
- 3-3HDFS架构详解
- 发布半年依旧无对手!网友:我怎么没听说...
- GAdminHttpd:图形化的 Apache 打点对象
- VBA 声明 Option Explicit,让代码更规范
- PHP踩坑:对象的引用
- 多线程——java练习题
- 好用的Redis客户端操作工具
- java 实现宠物领养_基于JavaEE的宠物领养系统的设计与实现任务书
- 安装VMwareTools
- 云计算与大数据作业 21大数据 刘佳琪
- Mahout in action 中文版-3.推荐器的数据表达
- Mysql数据处理,按照半小时汇总数据,
- 【NOIP2005 提高组】篝火晚会
- 在安装虚拟机时,”intel vt-x 处于禁用状态“ 如何解决
- python中,获取字符串的长度
- ui设计教程分享:关于Logo设计要素
- 0x00007FF8DE6BD1E2 (ucrtbased.dll)处(位于 6-指针与动态内存申请.exe 中)引发的异常: 0xC0000005: 写入位置 0xFFFFFFFF9288D140
- PTA 寻找250 (10分)
热门文章
- axios Post无法传递数据的解决方案
- linux下的图形界面扫雷游戏(Gtk+2.0)
- ipv4和计算机地址是什么意思,什么是ipv4 ipv6 ipv9 区别是什么(一) -电脑资料
- 实用Python之字符串长度计算
- 论文阅读笔记:《Contextual String Embeddings for Sequence Labeling》
- 微软云计算介绍与实践(实践之一)
- 如何优雅地用ARM开发板搭建服务器
- Extjs 4.x 得到form CheckBox的值
- 如何进行Android单元测试
- 使用Image.GetThumbnailImage 方法返回缩略图