`
youyu4
  • 浏览: 440482 次
社区版块
存档分类
最新评论

spring初始化bean和销毁bean时调用的方法

 
阅读更多

spring初始化bean和销毁bean时调用的方法

 

三种方法

 

1. 通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作

2. 通过 在xml中定义init-method 和  destory-method方法

3. 通过bean实现InitializingBean和 DisposableBean接口

 

 

三种方式的执行顺序:

1. 先注解,

2. 然后执行InitializingBean或DisposableBean接口中定义的方法,

3. 最后执行init-method或destroy-method属性指定的方法

 

 

例如:给予xml的init-method和 destory-method

 

xml:

<bean id="personService" class="com.myapp.core.beanscope.PersonService" scope="singleton"  init-method="init"  destroy-method="cleanUp">  
  
</bean>  

 

Java:

package com.myapp.core.beanscope;  
  
  
public class PersonService  {  
   private String  message;  
  
    public String getMessage() {  
        return message;  
    }  
      
    public void setMessage(String message) {  
        this.message = message;  
    }  
     
  
      
    public void init(){  
        System.out.println("init");  
    }  
    //  how  validate the  destory method is  a question  
    public void  cleanUp(){  
        System.out.println("cleanUp");  
    }  
}  

 

测试类:

package com.myapp.core.beanscope;  
  
import org.springframework.context.support.AbstractApplicationContext;  
import org.springframework.context.support.ClassPathXmlApplicationContext;  
  
public class MainTest {  
  public static void main(String[] args) {  
        
      AbstractApplicationContext  context =new  ClassPathXmlApplicationContext("SpringBeans.xml");  
      
    PersonService  person = (PersonService)context.getBean("personService");  
      
    person.setMessage("hello  spring");  
      
    PersonService  person_new = (PersonService)context.getBean("personService");  
      
    System.out.println(person.getMessage());  
    System.out.println(person_new.getMessage());  
    context.registerShutdownHook();  
  
      
}  
}   

 

结果:

init

hello  spring

hello  spring

cleanUp

可以看出 init 方法和 clean up方法都已经执行了。

 

注意:

context.registerShutdownHook(); 是一个钩子方法,当jvm关闭退出的时候会调用这个钩子方法,在设计模式之 模板模式中 通过在抽象类中定义这样的钩子方法由实现类进行实现,这里的实现类是AbstractApplicationContext,这是spring 容器优雅关闭的方法。

 

分享到:
评论

相关推荐

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

    本文将深入探讨如何在Spring容器初始化Bean和销毁Bean前后执行自定义的操作,以便于进行日志记录、资源清理等任务。 首先,我们需要了解Spring中Bean的生命周期。Bean的生命周期大致分为以下阶段: 1. 实例化:...

    Spring Bean创建初始化流程.docx

    整个流程中,Spring不仅创建了Bean,还管理了Bean的生命周期,包括依赖注入、初始化和销毁等。这种自动化管理使得开发者可以专注于业务逻辑,而不用关心对象的创建和管理细节。Spring的IoC容器使得应用更加灵活和...

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

    当Spring容器创建并初始化Bean时,会寻找带有@PostConstruct注解的方法并执行。 2. **InitializingBean接口** 如果一个Bean实现了Spring的InitializingBean接口,那么它必须重写`afterPropertiesSet()`方法。此...

    Spring实例化Bean顺序

    但是,这并不总是可靠的,因为Spring通常会延迟初始化Bean,除非显式要求或存在依赖关系。 2. **依赖注入**:Spring容器会根据Bean之间的依赖关系来决定实例化顺序。如果一个Bean依赖于另一个Bean,那么被依赖的...

    Spring初始化和销毁的实现方法

    "Spring初始化和销毁的实现方法" Spring框架中,Bean的初始化和销毁是非常重要的两个生命周期过程。今天我们将讨论Spring中 Bean 的初始化和销毁的实现方法。 1. 通过@Bean指定init-method和destroy-method 在 ...

    spring bean的生命周期

    - **初始化回调**:Spring支持两种类型的初始化回调方法,即`@PostConstruct`注解的方法和在XML中定义的`init-method`属性指定的方法。 2. **容器管理的生命周期回调** - **Singleton Beans的懒加载**:如果Bean...

    spring中的bean

    在Spring中,Bean通常代表应用程序中的一个对象,这些对象由Spring容器(ApplicationContext)管理,包括创建、初始化、装配和销毁。Bean可以通过XML配置文件、注解或者Java配置类进行定义。 1. **Bean的定义**:在...

    spring bean XML配置入门

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

    Spring Bean重复执行两次(实例被构造两次)问题分析

    3. **@PostConstruct与初始化回调**:Spring允许我们在Bean初始化后执行特定代码,通常通过`@PostConstruct`注解的方法来实现。如果这个方法被意外地调用了两次,那么Bean也会被构造两次。检查是否有多处调用或配置...

    Spring 源码分析(Bean的初始化)

    本篇文章主要分析了Spring如何通过`ClassPathXmlApplicationContext`来启动和初始化Bean的过程。 首先,`ClassPathXmlApplicationContext`是Spring的一种ApplicationContext实现,用于从类路径下的XML配置文件加载...

    spring的bean加载顺序样例项目

    在Spring框架中,Bean的加载顺序是一个重要的概念,它涉及到Spring容器如何管理和初始化Bean的过程。在"spring的bean加载顺序样例项目"中,我们可以通过分析和实验来深入理解这一主题。下面将详细阐述Spring Bean的...

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

    - `@PostConstruct`注解的方法:当容器调用该注解的方法时,表明Bean的初始化完成。 - `InitializingBean`接口:实现此接口的Bean,其`afterPropertiesSet()`方法会被调用。 - `init-method`属性:在Bean定义中...

    Spring中与Bean相关的接口

    `BeanFactory`提供了一个延迟初始化Bean的能力,这意味着Bean只在真正被请求时才会被实例化,这有助于提高应用的启动速度。例如,当使用`XmlBeanFactory`从XML配置文件加载Bean定义时,`BeanFactory`会解析并加载...

    spring bean life cycle

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

    Spring Bean 加载顺序 .

    实例化完成后,Spring会执行Bean的初始化方法,包括调用`@PostConstruct`注解的方法。同时,如果Bean实现了InitializingBean接口,其`afterPropertiesSet()`方法也会被调用。 8. **初始化后处理器**: 如果Bean...

    Spring Bean生命周期.pdf

    接着,Spring容器会调用实现了BeanPostProcessor接口的Bean的postProcessBeforeInitialization和postProcessAfterInitialization方法,以在初始化前后进行扩展。之后,如果Bean实现了InitializingBean接口,则调用...

    Spring bean 管理

    - 容器在创建Bean实例时调用初始化方法,在销毁Bean实例前调用销毁方法。 - Bean的生命周期过程包括实例化、属性赋值、BeanNameAware和BeanFactoryAware接口方法调用、BeanPostProcessor接口方法调用、...

    spring IOC反射装载bean

    比如,当配置了初始化方法或销毁方法,Spring会在适当的时候调用这些方法。例如: ```xml &lt;bean id="myBean" class="com.example.MyClass" init-method="initMethod"&gt; ... &lt;/bean&gt; ``` 这里,`init-method`指定的...

    Spring管理的Bean的生命周期

    1. **销毁方法**:在XML配置中,可以使用`destroy-method`属性指定一个销毁方法,容器在销毁Bean时调用。 2. **DisposableBean接口**:Bean如果实现了此接口,那么`destroy()`方法会在容器关闭时被调用。 另外,...

    spring bean的生命周期测试代码

    在Spring 4.2中,你可以通过`@Profile`注解来控制特定环境下的Bean激活,以及使用`@Lazy`注解延迟初始化Bean。测试代码可能包含了这些特性的使用示例,通过观察和运行代码,我们可以更好地理解这些功能的工作原理。 ...

Global site tag (gtag.js) - Google Analytics