• XML 配置:<bean lazy-init=”true” … />
  • Java 注解:@Lazy(true)

Spring 中默认是非延迟加载Bean的,也就是提前把Bean初始化好,用的时候直接用. 优点是运行的时候比较快(提前初始化了,直接用). 缺点是启动慢和占用内存,因为要初始化很多Bean.

延迟加载是需要的时候再去初始化Bean. 优点是解约内存,启动快(不需要提前初始化Bean). 缺点是运行的时候比较慢(用的时候先要初始化才能用).

@Lazy开启Bean延迟加载

DemoApplication.java

package com.rumenz;
public class DemoApplication {public static  void main(String[] args) {AnnotationConfigApplicationContext ac=new AnnotationConfigApplicationContext();ac.register(DemoApplication.class);ac.refresh();System.out.println("Spring 上下文启动完成。。。。。");//开启了延迟加载,调用的时候才会初始化final DefaultRumenzFactory bean = ac.getBean(DefaultRumenzFactory.class);ac.close();}@Bean(initMethod = "initMethod")@Lazy //开启延迟加载public static  DefaultRumenzFactory defaultRumenzFactory(){return new DefaultRumenzFactory();}
}

DefaultRumenzFactory.java

package com.rumenz;
public class DefaultRumenzFactory implements  InitializingBean {public DefaultRumenzFactory() {System.out.println("无参构造方法执行....");}@PostConstructpublic void init(){System.out.println("PostConstruct init.......");}public void initMethod(){System.out.println("init method.......");}@Overridepublic void afterPropertiesSet() throws Exception {System.out.println("afterPropertiesSet.....");}
}

调用ac.getBean(DefaultRumenzFactory.class) 输出

Spring 上下文启动完成。。。。。
xxx.DefaultListableBeanFactory - Creating shared instance of singleton bean 'defaultRumenzFactory'
无参构造方法执行....
PostConstruct init.......
afterPropertiesSet.....
init method.......

不调用ac.getBean(DefaultRumenzFactory.class) 输出

Spring 上下文启动完成。。。。。  //没有调用,所以没有执行初始化


源码:https://github.com/mifunc/Spring-Lazy-Bean

原文: https://rumenz.com/rumenbiji/Spring-Lazy-Bean.html

延迟初始化Spring Bean的几种方式相关推荐

  1. java 延迟实例化_延迟初始化Spring Bean的几种方式

    XML 配置: Java 注解:@Lazy(true) Spring 中默认是非延迟加载Bean的,也就是提前把Bean初始化好,用的时候直接用. 优点是运行的时候比较快(提前初始化了,直接用). 缺 ...

  2. spring—Bean实例化三种方式

    1) 使用无参构造方法实例化 它会根据默认无参构造方法来创建类对象,如果bean中没有默认无参构造函数,将会创建失败 <?xml version="1.0" encoding ...

  3. 将Bean注入Spring容器的五种方式

    将bean放入Spring容器中有哪些方式? 我们知道平时在开发中使用Spring的时候,都是将对象交由Spring去管理,那么将一个对象加入到Spring容器中,有哪些方式呢,下面我就来总结一下 1 ...

  4. Spring读取配置文件,获取bean的几种方式

    Spring读取配置文件,获取bean的几种方式 方法一:在初始化时保存ApplicationContext对象 代码: ApplicationContext ac = new FileSystemX ...

  5. Spring Boot 获取 Bean 的 3 种方式!还有谁不会?

    作者 | chilx 来源 | https://blog.csdn.net/showchi/article/details/97005720 注意:调用者要被spring管理 方式一 注解@PostC ...

  6. 把对象的创建交给spring来管理——  1.创建bean的三种方式     2.bean对象的作用范围     3.bean对象的生命周期

    把对象的创建交给spring来管理 spring对bean的管理细节     1.创建bean的三种方式     2.bean对象的作用范围     3.bean对象的生命周期 创建Bean的三种方式 ...

  7. 总结 Spring 注入 bean 的四种方式

    一提到 Spring,大家最先想到的是啥?是 AOP 和 IOC 的两大特性?是 Spring 中 Bean 的初始化流程?还是基于 Spring 的 Spring Cloud 全家桶呢? 今天我们就 ...

  8. 【小家Spring】Spring注解驱动开发---向Spring Ioc容器中注册Bean的7种方式

    每篇一句 比你有钱的人一定会比你努力,而比你努力的人终有一天会比你有钱 前言 Spring是一个非常强大的反转控制(IOC)框架,以帮助分离项目组件之间的依赖关系.因此可以说Spring容器对Bean ...

  9. Spring创建Bean的三种方式的使用和区别

    在学习Spring的时候,发现Spring的IOC(控制反转)为我们提供的三种创建Bean的方式. 1.Spring创建Bean的三种方式 这里采用XML配置,分别演示三种创建Bean的方式和代码. ...

最新文章

  1. python加密库_python基于pyDes库实现des加密的方法
  2. MYSQL专题-MySQL事务实现原理
  3. 裸板烧写 bootloader
  4. Eclipse插件安装的三种方式
  5. HDU - 5889 Barricade(最短路+最小割-最大流)
  6. app图标圆角角度_教你如何绘制风格统一的APP界面图标
  7. JAR清单类路径不仅适用于Java Application Launcher
  8. System Center 2012R2之SCVMM云部署SCOM(2-2)
  9. 【华为云技术分享】三大前端技术(React,Vue,Angular)探密(上)
  10. win10 + VS2015 + EF6 + MySQL
  11. USACO Broken Necklace
  12. 让一个软件系统同时支持多个多种数据库灵活配置,让客户可以任意配置各个核心数据库部分...
  13. SharePoint Designer中无法显示任何列表
  14. sscom32串口测试软件连接串口时有时会造成设备异常,更换别的串口软件后正常,特此记录
  15. 普通文件与迅雷、旋风、快车、RayFile的下载地址转换算法
  16. python用于cad_使用Python实现AutoCAD自动化
  17. 【通信原理】揭开傅里叶级数与傅里叶变换的神秘面纱
  18. 华硕AC68U路由器APP远程控制设置方法
  19. 腾讯云配置密钥使用putty登录 PuTTY实现Windows向Linux上传文件
  20. 快速下载自己喜欢的网页图片

热门文章

  1. ASP.NET 数据访问类
  2. L1-068 调和平均 (10 分)-PAT 团体程序设计天梯赛 GPLT
  3. [Python] L1-019. 谁先倒-PAT团体程序设计天梯赛GPLT
  4. 胶水代码(glue code)的定义(粘合代码)
  5. hadoop yarn 获取日志_Hadoop YARN日志查看方式
  6. 在LINUX中如何把2个文件中的内容合到另一个文件中
  7. linux系统环境下压缩与解压缩
  8. perl如何遍历指定文件夹下的指定扩展名文件,并按时间顺序要求删除
  9. MESSAGE: [unixODBC][MySQL][ODBC 3.51 Driver]Can't connect to local MySQL server through socket '/tmp
  10. ES5-String-indexOf/lastIndexOf