`
chimpp55
  • 浏览: 21859 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring中bean的init和destroy方法讲解

 
阅读更多
2016/11/23
在介绍这两个方法前,读者需要了解Spring中bean的生命周期,最常使用的两种生命周期是:singleton和prototype。


singleton,也就是单例

  在一个应用上下文容器中,所有的线程或对象通过getBean获得指定id的Bean,得到的都是同一个实例。

  这种的Bean实例完全由应用上下文容器来控制声明周期,用户无论何时何地得到的实例都是同一个。

  举个例子,钓鱼岛只有一个,日本说是他们的,中国说是中国的。虽然两方存在争议,都觉得自己有所有权,但是钓鱼岛只有一个,因此我们所说的钓鱼岛跟日本所说的钓鱼岛就是同一个岛:


prototype,原型

  这种类型的Bean会在每一次都创建一个新的实例,而实例的生命周期仅仅由应用上下文控制其初始化和装配,一旦初始化成功,控制权就会交给用户。

  常见的场景,例如车票或者电影票Bean实例,每次都应该是一个新的实例,因为一个票只归属于同一个人。



通过上面对生命周期的讲解,可以了解到,我们在spring中使用init-method和destroy-method方法时,仅仅在默认情况即singleton模式下,destroy-method才会起作用。



 <bean id="stage" class="com.spring.test.initdesotry.Stage"
         scope="prototype" //注意这句话,如果是singleton或者没有该句(默认情况)时,才会执行destroy-method指定的方法,如果是当前的prototype不会触发destroymethod的执行
         init-method="方法名" 
         destroy-method="方法名"/>




在主函数中,不要忘记应用上下文容器的关闭,只有这样,才会出发destroy-method的执行。






package com.spring.test.initdesotry;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class test {
    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
        Stage stage = (Stage)ctx.getBean("stage");
        stage.perform();
         ((ClassPathXmlApplicationContext) ctx).destroy(); //和一下两选一都可!
        ((ClassPathXmlApplicationContext) ctx).close();//关闭应用上下文容器,不要
忘记这句话
    }
}


总结,scope 必须是默认或者single型,再者,必须有关闭动作,或者破坏




分享到:
评论

相关推荐

    spring bean XML配置入门

    我们还可以在XML配置中定义Bean的初始化方法(`init-method`)和销毁方法(`destroy-method`),Spring容器会在适当的时间调用这些方法。 9. **Spring容器的启动与Bean的生命周期**: 一旦XML配置加载到Spring...

    spring bean的生命周期

    - **XML配置**:在传统的Spring应用中,Bean的定义通常写在XML配置文件中,如`springbean-xml`中的配置。 - **注解配置**:使用`@Component`,`@Service`,`@Repository`和`@Controller`注解标记类,配合`@...

    Spring Bean的初始化和销毁实例详解

    在本文中,我们详细讲解了Spring Bean的初始化和销毁,包括使用@Bean的initMethod和destroyMethod、JSR-250的@PostConstruct和@PreDestroy注解等多种方式来控制Bean的生命周期。在实际开发中,我们可以根据需要选择...

    Spring中Bean的生命周期 applicationcontext的应用(实现国际化,事件的传递)

    5. **销毁回调**:当Spring容器关闭时,或Bean定义中设置了`destroy-method`,Spring会调用Bean的销毁方法。同样,实现`DisposableBean`接口的Bean会调用`destroy()`方法。 接下来,我们看看ApplicationContext的...

    Spring框架中Bean的生命周期 Spring中Bean有几种作用域

    - `init-method`属性:在Bean定义中指定一个方法名,Spring会调用这个方法进行初始化。 4. **使用**:初始化完成后,Bean可以被其他Bean引用或者在应用中使用。 5. **销毁**:当Spring容器关闭时,它会调用Bean的...

    spring的bean加载顺序样例项目

    - **初始化方法**:Spring会调用Bean定义中的初始化方法,如`init-method`属性指定的方法或带有`@PostConstruct`注解的方法。 4. **Bean的排序策略** - 如果Bean定义了`@Order`注解或`priority`属性,Spring会...

    spring bean life cycle

    在Spring框架中,Bean生命周期是核心概念之一,它涉及到Bean的创建、初始化、使用和销毁等阶段。了解和掌握Bean生命周期对于开发高质量的Spring应用至关重要。以下是对Spring Bean生命周期的详细解析。 首先,Bean...

    spring创建bean简单示例

    本示例将深入探讨如何在Spring中创建和管理Bean。首先,我们需要理解Spring的IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)原理,这两个概念是Spring框架的核心。 **控制反转(IoC...

    Spring bean 管理

    - 通过&lt;bean&gt;标签的init-method和destroy-method属性指定初始化和销毁方法。 - 容器在创建Bean实例时调用初始化方法,在销毁Bean实例前调用销毁方法。 - Bean的生命周期过程包括实例化、属性赋值、BeanNameAware...

    spring bean 属性总结

    Spring的`&lt;beans&gt;`和`&lt;bean&gt;`元素及其属性提供了强大的配置能力,使开发者能够灵活地定义、配置和管理应用程序中的组件。通过深入了解这些元素和属性,开发人员可以更有效地利用Spring框架的功能,构建更加健壮和可...

    Spring高级应用,Bean讲解

    在 Spring 中,可以使用 `init-method` 和 `destroy-method` 属性来指定 Bean 的初始化和销毁方法。 Bean 是 Spring 框架中的核心组件,理解 Bean 的概念、配置、实例化和生命周期是使用 Spring 框架的基础。

    Spring Bean 加载顺序 .

    对于Singleton Bean,Spring在容器关闭时会调用`@PreDestroy`注解的方法和实现DisposableBean接口的`destroy()`方法。对于Prototype作用域的Bean,Spring不会自动管理销毁,需要由用户负责。 在实际应用中,理解...

    Spring bean初始化及销毁你必须要掌握的回调方法.docx

    下面将详细介绍如何通过不同方式定义Spring Bean的初始化和销毁回调方法。 **初始化回调方法** 1. **@PostConstruct注解** 这个Java标准注解用于标记一个方法,该方法将在对象完全构造后但在业务逻辑执行前被调用...

    Spring的bean生命周期

    3. **初始化**:初始化阶段,Spring允许开发者定义初始化方法,如通过@Bean的initMethod属性指定,或者在Bean实现InitializingBean接口并重写afterPropertiesSet()方法。此外,还可以使用@PostConstruct注解标记的...

    spring bean的生命周期测试代码

    6. **销毁**:当Spring容器关闭时,会调用Bean的`destroy-method`指定的方法或带有`@PreDestroy`注解的方法。这是清理资源或执行关闭操作的地方。 在Spring 4.2中,你可以通过`@Profile`注解来控制特定环境下的Bean...

    spring容器初始化bean和销毁bean之前进行一些操作的方法

    1. 实现DisposableBean接口:该接口包含一个`destroy()`方法,当Bean准备销毁时,Spring会调用这个方法。与InitializingBean接口类似,使用这种方式可能会影响代码的可读性。 2. 使用`@PreDestroy`注解:这个注解...

    Spring Bean生命周期.pdf

    在Spring 3.0之前,初始化主要通过实现InitializingBean接口的afterPropertiesSet方法或在XML配置文件中指定init-method属性来完成。从Spring 3.0开始,推荐使用Java配置类中的@Bean注解来指定初始化方法。 4. 销毁...

    spring中bean的生命周期详解

    在配置Bean时,可以通过init-method和destroy-method属性为Bean指定初始化和销毁方法。这两个属性可以让开发者在Bean的生命周期中执行特定的任务。 在Bean的生命周期中,还有一个非常重要的概念:Bean后置处理器。...

    Spring的Bean配置说明

    `factory-bean`属性指向一个已经定义的Bean,而`factory-method`则指明了工厂Bean中的哪个方法用于创建目标Bean。 - **依赖关系**: - **`depends-on`属性**:定义Bean之间的依赖关系,确保指定的Bean在当前Bean...

    Spring bean生命周期demo

    在这个例子中,`AppConfig`配置了一个名为`myBean`的Bean,并指定了初始化和销毁方法。`MyBean`实现了`InitializingBean`和`DisposableBean`接口,以及自定义的初始化和销毁方法,以便在生命周期的不同阶段执行特定...

Global site tag (gtag.js) - Google Analytics