Bean的概念
由IoC容器管理的那些组成你应用程序的对象我们就叫它Bean, Bean就是由Spring容器初始化、装配及管理的对象,除此之外,bean就与应用程序中的其他对象没有什么区别了。
Bean的命名
每个Bean可以有一个或多个id(或称之为标识符或名字),在这里我们把第一个id称为“标识符”,其余id叫做“别名”;这些id在IoC容器中必须唯一。如何为Bean指定id呢,有以下几种方式:
- 不指定id,只配置必须的全限定类名,由IoC容器为其生成一个标识,客户端必须通过接口getBean(classname.class)获取Bean;
- 指定id,必须在Ioc容器中唯一;通过getBean("id",classname.class)获取
- 指定name,这样name就是“标识符”,必须在Ioc容器中唯一;
- 指定id和name,id就是标识符,而name就是别名,必须在Ioc容器中唯一;
- 指定多个name,多个name用“,”、“;”、“ ”分割,第一个被用作标识符,其他的(alias1、alias2、alias3)是别名,所有标识符也必须在Ioc容器中唯一;
- 使用<alias>标签指定别名,别名也必须在IoC容器中唯一
<bean name="bean1;alias11,alias12;alias13 alias14" class="com.chou.spring.bean.MyBeanA"/>
<!-- 当指定id时,name指定的标识符全部为别名 -->
<bean id="bean2" name="alias21;alias22" class="com.chou.spring.bean.MyBeanB"/>
<!-- 如果id和name一样,IoC容器能检测到,并消除冲突 -->
<bean id="bean3" id="bean3" class="com.chou.spring.bean.MyBeanC"/>
具体用法可以参考此博客http://jinnianshilongnian.iteye.com/blog/1413857
Bean命名约定:
Bean的命名遵循XML命名规范,但最好符合Java命名规范,由“字母、数字、下划线组成“,而且应该养成一个良好的命名习惯, 比如采用“驼峰式”,即第一个单词首字母开始,从第二个单词开始首字母大写开始,这样可以增加可读性。
<beans>标签里面一些默认的值:
<beans xmlns="http://www.springframework.org/schema/beans"
.....
default-lazy-init="false" default-autowire="no"
default-init-method="MyInit" default-destroy-method="Mydestory">
<bean ...../>
</beans>
配置默认default-lazy-init为false
当然,也不是所有的beans都能设置default-lazy-init成为true.对于scheduler的bean不能用lazy-init,如果懒加载了所有的scheduler定时器就都不管用了
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name ="triggers">
<list>
<ref bean="buildHtmlTrigger"/>
<ref bean="mailSenderTrigger"/>
<ref bean="topicBuildTrigger"/>
</list>
</property>
</ bean >
</beans>
下面是关于Bean生命周期的配置
延迟初始化Bean
<bean id="bean_b" class="com.chou.spring.bean.MyBeanB" lazy-init="true">
<property name="beanA" ref="bean_a"/>
</bean>
● lazy-init延迟初始化也叫做惰性初始化,指不提前初始化Bean,而是只有在真正使用时才创建及初始化Bean。
● Spring容器会在创建容器时提前初始化“singleton”作用域Bean,“singleton”就是单例的意思即整个容器每个Bean只有一个实例,Spring容器预先初始化Bean通常能帮助我们提前发现配置错误,所以如果没有什么情况建议保持默认单例,除非有某个Bean可能需要加载很大资源,而且很可能在整个应用程序生命周期中很可能使用不到,可以设置为延迟初始化。
● 延迟初始化的Bean通常会在第一次使用时被初始化;或者在被非延迟初始化Bean作为依赖对象注入时在会随着初始化该Bean时被初始化,因为在这时使用了延迟初始化Bean。
● 容器管理初始化Bean消除了编程实现延迟初始化,完全由容器控制,只需在需要延迟初始化的Bean定义上配置即可,比编程方式更简单,而且是无侵入代码的。
Bean初始化顺序
depends-on:指当前Bean初始化及销毁时的顺序,使用depends-on属性值指定的Bean要先初始化完毕后才初始化当前Bean,由于只有“singleton”Bean能被Spring管理销毁,所以当指定的Bean都是“singleton”时,使用depends-on属性指定当前的Bean要在指定的Bean之后销毁。
init-method="init":指定Bean初始化时调用的方法,在构造器注入和setter注入完毕后执行。
destroy-method="destroy":指定Bean销毁时调用方法,只有“singleton”作用域能销毁,“prototype”作用域的一定不能,其他作用域不一定能;在Spring容器中如果没指定作用域默认就是“singleton”
<bean id="bean_a" class="com.chou.spring.bean.MyBeanA"
init-method="MyInit" destroy-method="Mydestory"/>
<bean id="bean_b" class="com.chou.spring.bean.MyBeanB" depends-on="bean_a">
<property name="beanA" ref="bean_a"/>
</bean>
● “bean_b”指定了“depends-on”属性为“bean_a”,所以在“bean_b”Bean初始化之前要先初始化“bean_a”,而在销毁“bean_a”之前先要销毁“bean_b”,其实通俗点理解就是depends-on属性就是给自己指定一个Bean,你要在初始化的时候挡在我前面先初始化,在我销毁之前你也要比我先销毁,可以说是找个垫背的bean。
● “depends-on”属性可以指定多个Bean,若指定多个Bean可以用“;”、“,”、空格分割。
● 那“depends-on”有什么好处呢?主要是给出明确的初始化及销毁顺序,比如要初始化“bean_b”时要确保“bean_a”Bean的资源准备好了,否则使用“bean_b”时会看不到准备的资源;而在销毁时要先在“bean_b”Bean里把对“bean_a”资源的引用释放掉才能销毁“bean_b”,否则可能销毁 “bean_a”时而“bean_b”还保持着资源访问,造成资源不能释放或释放错误。
例如:在平常开发中我们可能需要访问文件系统,而文件打开、关闭是必须配对的,不能打开后不关闭,从而造成其他程序不能访问该文件。
可以参考这个博客的列子,写的很有代表性:http://jinnianshilongnian.iteye.com/blog/1415461
分享到:
相关推荐
- **XML配置**:在传统的Spring应用中,Bean的定义通常写在XML配置文件中,如`springbean-xml`中的配置。 - **注解配置**:使用`@Component`,`@Service`,`@Repository`和`@Controller`注解标记类,配合`@...
3. 使用Java配置:可以使用Java代码来配置Bean的生命周期和作用域。 在本文中,我们介绍了Spring中Bean的生命周期和作用域及实现方式。了解Bean的生命周期和作用域是非常重要的,因为它们决定了Bean的生命周期和...
在本文中,我们将深入探讨Spring框架中的Bean XML配置,这是Spring的核心特性之一,它允许我们定义、管理和装配应用中的对象。我们将围绕以下知识点展开: 1. **Spring框架基础**: Spring是一个开源的Java平台,...
本资源提供了在Spring 4.2环境下关于Bean生命周期的测试代码,帮助我们深入理解这一关键概念。 首先,让我们了解Spring Bean的生命周期主要包含以下几个阶段: 1. **实例化**:Spring容器通过`Class`对象或`...
接下来,我们将深入探讨Spring Bean生命周期的各个阶段,并通过具体的示例来演示。 1. **配置阶段** 在Spring容器初始化时,它会读取配置文件(如XML或Java配置),解析Bean定义,包括其依赖关系、初始化方法、...
其中,Spring Bean生命周期的管理是Spring框架的核心功能之一,它涉及Spring容器如何创建、配置以及销毁Bean的整个过程。理解Spring Bean的生命周期对于开发高效和可维护的Java应用至关重要。 Spring Bean生命周期...
Bean生命周期的理解对于优化应用性能和理解Spring内部工作原理至关重要。这里我们将深入探讨Spring的Bean生命周期、容器周期以及工厂周期。 首先,让我们从Bean生命周期开始。在Spring中,Bean的生命周期包括以下几...
总之,Spring管理的Bean生命周期包括创建、初始化、活跃使用和销毁四个主要阶段,通过各种回调方法、接口和注解,我们可以对Bean的行为进行自定义,以满足不同应用场景的需求。深入理解这些机制,有助于我们更好地...
SpringBean的生命周期.mdj
Spring中的Bean生命周期主要分为两个阶段:容器管理阶段和用户自定义阶段。在容器管理阶段,Spring容器负责Bean的实例化、属性注入、初始化、使用和销毁。而在用户自定义阶段,开发者可以通过定义回调方法或使用特定...
在Spring框架中,Bean的生命周期管理和ApplicationContext的应用是两个核心概念,它们对于理解Spring如何管理和协调应用中的对象至关重要。本文将深入探讨这两个主题,并结合国际化(i18n)和事件传递来阐述它们在...
本篇将详细阐述Spring Bean生命周期的各个阶段,以及如何记忆和深入理解这一过程。 首先,Spring Bean的生命周期可以分为两个主要阶段:容器初始化阶段和容器销毁阶段。 在容器初始化阶段,Spring Bean会经历以下...
Spring 框架系列(8)- Spring IOC 实现原理详解之 Bean 实例化(生命周期、循环依赖等) 本文主要研究 Spring 框架中 Bean 的实例化过程,包括 Bean 的生命周期和循环依赖问题的解决方案。在 Spring 框架中,Bean ...
在Spring框架中,Bean生命周期是核心概念之一,它涉及到Bean的创建、初始化、使用和销毁等阶段。了解和掌握Bean生命周期对于开发高质量的Spring应用至关重要。以下是对Spring Bean生命周期的详细解析。 首先,Bean...
SPRING FRAMEWORK BEAN作用域和生命周期原理解析 Spring Framework 是一个流行的 Java Web 应用程序框架,它提供了一个强大的依赖注入机制,称为 Bean 容器。Bean 容器管理着应用程序中的所有对象,并提供了一些...
在Spring框架中,Bean的生命周期是其核心特性之一,它涉及到Bean从创建到销毁的整个过程。本篇文章将深入探讨Spring Bean的生命周期管理,包括初始化、正常使用和销毁等阶段,以及如何自定义这些过程。 首先,...
Spring Bean 生命周期是 Spring 框架中的一个核心概念,了解 Spring Bean 的生命周期对我们了解整个 Spring 框架会有很大的帮助。本文将详细介绍 Spring Bean 生命周期的概念、生命周期图、生命周期阶段、生命周期...
Spring框架是Java应用开发中的一个核心组件,尤其在企业级应用中广泛使用。Spring通过其IoC(Inversion of Control,控制反转)容器管理Bean的生命周期,...理解Bean生命周期对于有效管理和优化Spring应用至关重要。
深入了解Spring中Bean的作用域和生命周期 在 Spring 框架中,Bean 的作用域和生命周期是两个非常重要的概念,它们决定了 Bean 的实例化和生命周期。了解 Spring 中 Bean 的作用域和生命周期是非常重要的,这将有助...
5. **生命周期管理**:Spring容器负责Bean的生命周期,包括初始化、使用和销毁。我们可以自定义初始化和销毁方法,或者使用`@PostConstruct`和`@PreDestroy`注解。 6. **作用域**:Spring Bean有多种作用域,如单例...