Spring 配置中的 default-lazy-init=true

2024-05-03 02:32

本文主要是介绍Spring 配置中的 default-lazy-init=true,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

spring的容器是提供了lazy-load的,即默认的缺省设置是bean没有lazy-load,该属性处于false状态,这样导致spring在启动过程导致在启动时候,会默认加载整个对象实例图,从初始化ACTION配置、到service配置到dao配置、乃至到数据库连接、事务等等。 
这么庞大的规模,难怪spring的启动时间要花将近1分钟。尝试了一下,把beans的default-lazy-init改为true就,再次启动,速度从原来的55秒,降到8秒钟!!Great!虽然是非常小一个改动,但是影响确实非常大。 
Spring的default-lazy-init 与 lazy-init 
在同一个文件中<bean />里面设置的优先级大于<beans />里设置的优先级: 

view plaincopy to clipboardprint? 
1.<beans />                <bean />            immediately  
2.<beans />                <bean lazy-init="true" />   lazy       
3.<beans />                <bean lazy-init="false"/>   immediately            
4.<beans default-lazy-init="true"/>  <bean />          lazy   
5.<beans default-lazy-init="true"/>  <bean lazy-init="true" />     lazy   
6.<beans default-lazy-init="true"/>  <bean lazy-init="false" />    immediately   
7.<beans default-lazy-init="false"/>  <bean />             immediately   
8.<beans default-lazy-init="false"/>  <bean lazy-init="true" />    lazy   
9.<beans default-lazy-init="false"/>  <bean lazy-init="false" />   immediately   
如果在一个spring配置文件中引入另外的配置文件,如:<import resource="classpath:beanss.xml"/> 
则以被引入文件(beanss.xml)中设置的<beans />里的设置为准,与引入文件中的设置无关。 

1.<bean id="testInit" lazy-init="true" init-method="init" class="com.test.Test">  
2.</bean>   
如果在一个spring配置文件中引入另外的配置文件,如:<import resource="classpath:beanss.xml"/> 
则以被引入文件(beanss.xml)中设置的<beans />里的设置为准,与引入文件中的设置无关。 

1.<bean id="testInit" lazy-init="true" init-method="init" class="com.test.Test">  
2.    </bean>   
spring的default-lazy-init参数 

spring在启动的时候,会默认加载会默认加载整个对象实例图,从初始化ACTION配置、到 service配置到dao配置、乃至到数据库连接、事务等等。这样可以减少web服务器在运行时的负担,但是对于开发者来说无疑是效率极低的一个设置了。  还好,spring提供了default-lazy-init属性,其配置形式如下,applicationContext.xml中: 
< beans  default-lazy-init ="true" >   
      < bean  class ="org.xxxx.bean" >   
      ......
</beans> 

    spring配置默认default-lazy-init为false,当配置为true时sping不会再去加载整个对象实例图,大大减少了初始化的时间,减少了spring的启动速度。 

    这样做只是为了在开发过程中节约启动时间,在部署到实际环境中,倒是没必要设置default-lazy-init为true。毕竟部署到实际环境中不是经常的事,每次启动1分钟倒不是大问题,而且可以提高服务器效率。 

    当然,也不是所有的beans都能设置default-lazy-init成为true.对于scheduler的bean不能用lazy-init   
< beans  default-lazy-init ="true" >   
      < bean  class ="org.springframework.scheduling.quartz.SchedulerFactoryBean" >   
          < property   name ="triggers" >   
              < list >   
                  < ref   bean ="buildHtmlTrigger" />   
                  < ref   bean ="askTrigger" />   
                  < ref   bean ="mailSenderTrigger" />   
                  < ref   bean ="topicDetailBuildTrigger" />   
                  < ref   bean ="forumBuildTrigger" />   
                  < ref   bean ="topicBuildTrigger" />   
              </ list >   
          </ property >   
      </ bean >   
</ beans >   
    这样的话。所有的scheduler就都不管用了。所以请大家要注意。   

Spring 中lazy-init 和abstract 属性 
1.lazy-init 
<beans> 
      <bean id="service1" type="bean路径" lazy-init="true"/> 
      <bean id="service2" type="bean路径" lazy-init="false"> 
             <property name="service1" ref="service1"/> 
      </bean> 
</beans> 
以上两个bean,一个lazy-init属性为true,一个为false,由什么区别呢 
当 IoC容器启动时,service2会实例化,而service1则不会;但是但容器实例化service2时,service1也被实例化了,为什么呢,因为service2需要它。也就是说lazy-init="true"的bean,IoC容器启动时不会实例化该bean,只有当容器需要用到时才实例化它。lazy-init有利于容器效率,对于不需要的bean可以先不管。 
2.abstract 
<bean id="baseTxService" 
          class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" 
       abstract="true"> 
            …… 
</bean> 
bean abstract="true"时,该bean不会被实例化,上面的bean是个模板 

转自:http://javatea.iteye.com/blog/1337706

关于abstract更多可见:https://blog.csdn.net/u010002184/article/details/80628657

这篇关于Spring 配置中的 default-lazy-init=true的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/955645

相关文章

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

Redis Cluster模式配置

《RedisCluster模式配置》:本文主要介绍RedisCluster模式配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录分片 一、分片的本质与核心价值二、分片实现方案对比 ‌三、分片算法详解1. ‌范围分片(顺序分片)‌2. ‌哈希分片3. ‌虚

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

java中long的一些常见用法

《java中long的一些常见用法》在Java中,long是一种基本数据类型,用于表示长整型数值,接下来通过本文给大家介绍java中long的一些常见用法,感兴趣的朋友一起看看吧... 在Java中,long是一种基本数据类型,用于表示长整型数值。它的取值范围比int更大,从-922337203685477

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c