zoukankan      html  css  js  c++  java
  • 【spring源码学习】Spring @PostConstruct和@PreDestroy实例

    在Spring中,既可以实现 InitializingBean和DisposableBean接口或在bean配置文件中指定 init-method 和 destroy-method 在初始化和销毁回调函数。在这篇文章中,我们将介绍如何使用 @PostConstruct 和 @PreDestroy 注解来做同样的事情。

    注:@PostConstruct和@PreDestroy 标注不属于 Spring,它是在J2EE库- common-annotations.jar。

    @PostConstruct 和 @PreDestroy

    一个 CustomerService Bean使用 @PostConstruct 和 @PreDestroy 注释
    package com.yiibai.customer.services;
    
    import javax.annotation.PostConstruct;
    import javax.annotation.PreDestroy;
    
    public class CustomerService
    {
    	String message;
    	
    	public String getMessage() {
    	  return message;
    	}
    
    	public void setMessage(String message) {
    	  this.message = message;
    	}
    	
    	@PostConstruct
    	public void initIt() throws Exception {
    	  System.out.println("Init method after properties are set : " + message);
    	}
    	
    	@PreDestroy
    	public void cleanUp() throws Exception {
    	  System.out.println("Spring Container is destroy! Customer clean up");
    	}
    	
    }
    默认情况下,Spring不会意识到@PostConstruct和@PreDestroy注解。要启用它,要么注册“CommonAnnotationBeanPostProcessor”,要么在bean配置文件的<context:annotation-config />‘ 指定,

    1. CommonAnnotationBeanPostProcessor

    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans
    	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
    
    	<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" />
    
    	<bean id="customerService" class="com.yiibai.customer.services.CustomerService">
    		<property name="message" value="i'm property message" />
    	</bean>
    		
    </beans>

    2. <context:annotation-config />

    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans
    	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    	http://www.springframework.org/schema/context
    	http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    
    	<context:annotation-config />
    
    	<bean id="customerService" class="com.yiibai.customer.services.CustomerService">
    		<property name="message" value="i'm property message" />
    	</bean>
    		
    </beans>

    执行结果

    package com.yiibai.common;
    
    import org.springframework.context.ConfigurableApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.yiibai.customer.services.CustomerService;
    
    public class App 
    {
        public static void main( String[] args )
        {
        	ConfigurableApplicationContext context = 
        	  new ClassPathXmlApplicationContext(new String[] {"Spring-Customer.xml"});
    	
        	CustomerService cust = (CustomerService)context.getBean("customerService");
        	
        	System.out.println(cust);
        	
        	context.close();
        }
    }

    输出结果

    Init method after properties are set : im property message
    com.yiibai.customer.services.CustomerService@47393f
    ...
    INFO: Destroying singletons in org.springframework.beans.factory.
    support.DefaultListableBeanFactory@77158a: 
    defining beans [customerService]; root of factory hierarchy
    Spring Container is destroy! Customer clean up
    initIt()方法(@PostConstruct)被调用时,消息属性设置后 cleanUp() 方法(@PreDestroy)是在context.close()执行后被调用;
     
  • 相关阅读:
    【Vue】源码——编译过程
    FreeRADIUS 、DaloRADIUS 搭建记录
    docker 学习笔记
    wget 技巧
    Centos 部署Cobbler系统
    Cloudstack 安装记录
    利用Google GCM发送push通知到Android客户端
    利用ApnsPHP包向IOS推送消息
    Linux下SCP的使用
    Android Google购买PHP服务器端验证(订阅购买和一次性购买)
  • 原文地址:https://www.cnblogs.com/shangxiaofei/p/8466844.html
Copyright © 2011-2022 走看看