Spring Beans的生命周期:
1. 实例化:
默认为调用该Bean的无参构造。 如果该Bean存在父类,则首先调用父类的无参构造。
2. 设置属性值:
3. 如果Bean实现了BeanNameAware接口,调用setBeanName方法。
4. 如果Bean实现了BeanFactoryAware接口,调用setBeanFactory方法。
5. 如果Bean实现了InitializingBean接口,调用afterPropertiesSet方法。
6. 如果配置文件(beans.xml)里设置了init-Method方法(对应的annotation为PostConstruct), 将会执行配置的init-Method方法
7. 如果Bean的scope为singleton(默认),容器将会把该bean放入Spring Ioc的缓存池里,并将Bean的引用返回给调用者,Spring容器将继续管理这个bean,如果bean实现了DisposableBean,将会调用destroy方法。如果配置文件定义了destroy-method,将会调用该方法。
8. 如果Bean的scope为prototype, 容器将Bean返回给调用者,以后都将由调用者负责Bean的生命周期。spring不再管理。 prototype和singleton的区别在于:singleton的bean的上述周期都是在容器初始化的时候执行的。 而prototype是在getBean的时候执行的。
ps: AbstractApplicationContext 含有销毁容易的方法。。registerShutdownHook
package inter;
public class Phone {
protected int price;
protected String name;
public Phone(int price,String name){
System.out.println("parent param construct");
this.price = price;
this.name = name;
}
public Phone(){
System.out.println("parent default construct");
}
public void speak(){
System.out.println(name+" speaks");
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
System.out.println("parent setPrice");
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
System.out.println("parent setName");
this.name = name;
}
}
package Impl;
import inter.Phone;
import javax.annotation.PostConstruct;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
public class IPhone extends Phone implements BeanFactoryAware,BeanNameAware,InitializingBean,DisposableBean{
public IPhone(int price, String name) {
super(price, name);
System.out.println("param construct");
}
public IPhone() {
System.out.println("default construct");
}
@PostConstruct
public void initMethod(){
System.out.println("init-Method");
}
@Override
public void speak(){
System.out.println(this.getName()+" general speaks ");
}
@Override
public void setBeanFactory(BeanFactory arg0) throws BeansException {
System.out.println("setBeanFactory");
}
@Override
public void setBeanName(String arg0) {
System.out.println("bean name:"+arg0);
}
@Override
public void setPrice(int price) {
// TODO Auto-generated method stub
this.price = price;
System.out.println("son Set price");
}
@Override
public void setName(String name) {
this.name = name;
System.out.println("son Set name");
}
@Override
public void destroy() throws Exception {
System.out.println("destory");
}
public void testDestroy(){
System.out.println("destroy-method");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("afterPropertiesSet");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p = "http://www.springframework.org/schema/p"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="iphone" name="iphone2" class="Impl.IPhone" p:name="iphone4s" p:price="100" scope="singleton" destroy-method="testDestroy"/>
</beans>
分享到:
相关推荐
接下来,我们将深入探讨Spring Bean生命周期的各个阶段,并通过具体的示例来演示。 1. **配置阶段** 在Spring容器初始化时,它会读取配置文件(如XML或Java配置),解析Bean定义,包括其依赖关系、初始化方法、...
- **XML配置**:在传统的Spring应用中,Bean的定义通常写在XML配置文件中,如`springbean-xml`中的配置。 - **注解配置**:使用`@Component`,`@Service`,`@Repository`和`@Controller`注解标记类,配合`@...
其中,Spring Bean生命周期的管理是Spring框架的核心功能之一,它涉及Spring容器如何创建、配置以及销毁Bean的整个过程。理解Spring Bean的生命周期对于开发高效和可维护的Java应用至关重要。 Spring Bean生命周期...
Spring Bean 生命周期是 Spring 框架中的一个核心概念,了解 Spring Bean 的生命周期对我们了解整个 Spring 框架会有很大的帮助。本文将详细介绍 Spring Bean 生命周期的概念、生命周期图、生命周期阶段、生命周期...
Spring框架是Java应用开发中的一个核心组件,尤其在企业级应用中广泛使用。Spring通过其IoC(Inversion of Control,控制反转)容器管理Bean的生命周期,...理解Bean生命周期对于有效管理和优化Spring应用至关重要。
本篇将详细阐述Spring Bean生命周期的各个阶段,以及如何记忆和深入理解这一过程。 首先,Spring Bean的生命周期可以分为两个主要阶段:容器初始化阶段和容器销毁阶段。 在容器初始化阶段,Spring Bean会经历以下...
在Spring框架中,Spring Bean的生命周期始于其创建过程,即"我从哪里来?"的问题。首先,要明确几个核心概念:Java Bean、Spring Bean和Spring IoC(控制反转)容器。Java Bean是一种遵循特定规范的Java类,而Spring...
在Spring框架中,Bean生命周期是核心概念之一,它涉及到Bean的创建、初始化、使用和销毁等阶段。了解和掌握Bean生命周期对于开发高质量的Spring应用至关重要。以下是对Spring Bean生命周期的详细解析。 首先,Bean...
Spring中Bean的生命周期和作用域及实现方式 Spring是一个非常流行的Java应用程序框架,它提供了一个灵活的机制来管理Bean的生命周期和作用域。Bean的生命周期和作用域是Spring框架中两个非常重要的概念,它们决定了...
下面以一个简单的Person类为例,展示Spring Bean生命周期的各个阶段: ```java public class Person implements BeanFactoryAware, BeanNameAware, InitializingBean, DisposableBean { // 省略属性和构造器 @...
在Spring框架中,在IOC容器中管理的Bean分为单例和原型两种,单例Bean在容器启动时就实例化,原型Bean则是每次从容器中请求时才会实例化。
本资源提供了在Spring 4.2环境下关于Bean生命周期的测试代码,帮助我们深入理解这一关键概念。 首先,让我们了解Spring Bean的生命周期主要包含以下几个阶段: 1. **实例化**:Spring容器通过`Class`对象或`...
SpringBean的生命周期.mdj
在Spring框架中,Bean的生命周期管理和ApplicationContext的应用是两个核心概念,它们对于理解Spring如何管理和协调应用中的对象至关重要。本文将深入探讨这两个主题,并结合国际化(i18n)和事件传递来阐述它们在...
Bean生命周期的理解对于优化应用性能和理解Spring内部工作原理至关重要。这里我们将深入探讨Spring的Bean生命周期、容器周期以及工厂周期。 首先,让我们从Bean生命周期开始。在Spring中,Bean的生命周期包括以下几...
在Spring框架中,Bean的生命周期管理是其核心功能之一,它允许开发者控制Bean从创建到销毁的整个过程。本文将详细解析Spring Bean的生命周期配置过程。 首先,Bean的生命周期始于实例化。当Spring容器...
Spring中的Bean生命周期主要分为两个阶段:容器管理阶段和用户自定义阶段。在容器管理阶段,Spring容器负责Bean的实例化、属性注入、初始化、使用和销毁。而在用户自定义阶段,开发者可以通过定义回调方法或使用特定...