spring Bean 配置中scope 和 lazy-init

Spring Bean配置默认为单实例

Bean默认的是单例的.

如果不想单例需要如下配置:
<bean id="user" class="..." singleton="false"/>

singleton就是配置这个bean是否是单例的,如果不写,就是默认值true。

spring Bean 配置中 scope的作用

1.Bean的作用域可以通过Bean标签的scope属性进行设置,Bean的作用域包括:
默认情况下scope="singleton",那么该Bean是单例,任何人获取该Bean实例的都为同一个实例;
scope="prototype",任何一个实例都是新的实例;
scope="request",在WEB应用程序中,每一个实例的作用域都为request范围;
scope="session",在WEB应用程序中,每一个实例的作用域都为session范围;

注意:在默认情况下,Bean实例在被Spring容器初始化的时候,就会被实例化,默认调用无参数的构造方法。在其它情况下,Bean将会在获取实例的时候才会被实例化。

2.Bean可以通过指定属性init-method指定初始化后执行的方法,以及通过指定属性destroy-method销毁时执行的方法。

语法:<bean ....   destroy-method="销毁时调用的方法名" init-method="初始化后执行的方法名"/>

spring Bean 配置中 lazy-init详解

ApplicationContext实现的默认行为就是在启动时将所有singleton bean提前进行实例化(也就是依赖注入)。提前实例化意味着作为初始化过程的一部分,ApplicationContext实例会创建并配置所有的singleton bean。通常情况下这是件好事,因为这样在配置中的任何错误就会即刻被发现(否则的话可能要花几个小时甚至几天)。

<bean id="testBean" class="com.fhx.TestBean"> 该bean默认的设置为:

<bean id="testBean" class="com.fhx.TestBean" lazy-init="false">    lazy-init="false" 立退加载, 表示spring启动时,立刻进行实例化。

(lazy-init 设置只对scop属性为singleton的bean起作用)

有时候这种默认处理可能并不是你想要的。如果你不想让一个singleton bean在ApplicationContext实现在初始化时被提前实例化,那么可以将bean设置为延迟实例化。

<bean id="testBean" class="com.fhx.TestBean" lazy-init="true">,   lazy-init="true"> 延迟加载 ,设置为lazy的bean将不会在ApplicationContext启动时提前被实例化,而是在第一次向容器通过getBean索取bean时实例化的。

如果一个设置了立即加载的bean1,引用了一个延迟加载的bean2,那么bean1在容器启动时被实例化,而bean2由于被bean1引用,所以也被实例化,这种情况也符合延迟加载的bean在第一次调用时才被实例化的规则。

在容器层次中通过在<beans/>元素上使用‘default-lazy-init‘属性来控制延迟初始化也是可能的。如下面的配置:

<beans default-lazy-init="true"><!-- no beans will be eagerly pre-instantiated... --></beans>

如果一个bean的scope属性为scope=“pototype“时,即使设置了lazy-init="false",容器启动时不实例化bean,而是调用getBean方法是实例化的

另外加以说明:

.init-method属性指定初始化时执行的方法,distory-method属性指定bean销毁时执行的方法。

 lazy-init详解 摘自 : http://blog.csdn.net/fhx007/article/details/7016704

原文 同样也有 scope的详解  http://blog.csdn.net/fhx007/article/details/7016694

谢谢作者!

时间: 2024-10-09 17:33:30

spring Bean 配置中scope 和 lazy-init的相关文章

Spring hibernate配置中mappingLocations、mappingDirecto

mappingLocations.mappingDirectoryLocations与mappingJarLocations 区别 由于spring对hibernate配置文件hibernate.cfg.xml的集成相当好, 所以,在项目中我一直使用spring的org.springframework.orm.hibernate.LocalSessionFactoryBean来取代hibernate.cfg.xml文件的功能 LocalSessionFactoryBean有好几个属性用来查找hi

Spring AOP配置中的问题aop:aspectj-autoproxy

(1)对于菜鸟来说,在Spring学习中可能会遇到各种各样的问题.下面就简单的写一下,我在学习Spring AOP配置中遇到的问题吧. 一般情况下,很多人都认为我们把spring framework中的所有jar包都加入到classpath中就OK了,在学习Ioc和Aop的时候就只剩下编程了,啥都不用管了. 其实不是这样的,对于以前的版本来说,可能所有用到的包都集成在一起了,但spring 技术的不断发展和扩大.完善.最终,好多模块都分家了,比如,在学习Ioc的时候我们基本上可以使用spring

Spring Bean配置

Spring 是什么 •Spring 为简化企业级应用开发而生. 使用 Spring 可以使简单的 JavaBean 实现以前只有 EJB 才能实现的功能. •Spring 是一个 IOC(DI) 和 AOP 容器框架. –轻量级:Spring 是非侵入性的 - 基于 Spring 开发的应用中的对象可以不依赖于 Spring 的 API –依赖注入(DI --- dependency injection.IOC) –面向切面编程(AOP --- aspect oriented programm

关于Spring初始化配置中的dispatcherServlet的配置问题

前几年的web开发中,url通常是以.do..action..xhtml等等作为结尾,所以在web.xml中通常配置DispatcherServlet的url-pattern类似.do..action结尾,这样的配置方式导致dispatcherServlet只会拦截*do或者*.action结尾,当然这样的方式不会带来任何问题,例如:  <servlet>         <servlet-name>Spring</servlet-name>         <s

[原创]java WEB学习笔记98:Spring学习---Spring Bean配置及相关细节:如何在配置bean,Spring容器(BeanFactory,ApplicationContext),如何获取bean,属性赋值(属性注入,构造器注入),配置bean细节(字面值,包含特殊字符,引用bean,null值,集合属性list map propert),util 和p 命名空间

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

ssh项目实战经验总结-在bean配置中加载外部的properties配置项

spring配置文件中有些需要改动的配置,为了方便维护和管理,我们把这一部分配置单独的写到properties中. db.properties文件 jdbcUrl=jdbc:mysql:///govSys driverClass=com.mysql.jdbc.Driver user=root password=33269456.cx initialPoolSize=10 maxPoolSize=30 spring配置文件 <?xml version="1.0" encoding=

Spring Bean配置2

Spring表达式语言:SpEL •Spring 表达式语言(简称SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言. •语法类似于 EL:SpEL 使用 #{…} 作为定界符,所有在大框号中的字符都将被认为是 SpEL •SpEL 为 bean 的属性进行动态赋值提供了便利 •通过 SpEL 可以实现: –通过 bean 的 id 对 bean 进行引用 –调用方法以及引用对象中的属性 –计算表达式的值 –正则表达式的匹配 SpEL:字面量 •字面量的表示: –整数:<proper

[原创]java WEB学习笔记101:Spring学习---Spring Bean配置:IOC容器中bean的声明周期,Bean 后置处理器

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

spring Bean配置的小技巧

1.在主配置文件applicationContext.xml 中配置一个抽象bean 2.在子配置文件中引用这个抽象bean 3.这样的好处就是当sessionFactory 的名字发生的改变的时候,按照方式一的方式配置就必须全部一个个改变,会干死人的,但是第二种只需要改下主配置文件中的抽象bean的sessionFactory 就好了