zoukankan      html  css  js  c++  java
  • Spring中Bean的生命周期方法

    Bean的生命周期方法

    srcdaydayCar.java

    package dayday;

    import com.sun.org.apache.xpath.internal.SourceTree;

    import javax.sound.midi.Soundbank;

    /**
    * Created by I am master on 2016/11/28.
    */
    public class Car {
    private String name;
    public void setName(String name){
    this.name=name;
    System.out.println("setName...");
    }
    public String getName(){
    return name;
    }
    public String toString(){
    return "["+"carname="+name+"]";
    }
    public Car(){
    System.out.println("Car's constructor...");
    }
    public void init(){
    System.out.println("init...");
    }
    public void destroy(){
    System.out.println("destroy...");
    }
    }

    srcdaydayMain.java

    package dayday;

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

    import java.net.SocketTimeoutException;
    import java.sql.SQLException;

    /**
    * Created by I am master on 2016/11/28.
    */
    public class Main {
    public static void main(String[] args) throws SQLException, ClassNotFoundException {
    ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
    Car car=ctx.getBean("car",Car.class);
    System.out.println(car);
    //用close()方法是就会调用bean对应的destroy()方法
    ctx.close();
    }
    }

    srceans.xml

    <?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"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <bean id="car" class="dayday.Car" init-method="init" destroy-method="destroy">
    <property name="name" value="Audi"/>
    </bean>
    </beans>

    运行结果

    Car's constructor...
    setName...
    init...

    [carname=Audi]
    destroy...

    bean的生命周期进行管理的过程分为五步

    1)通过构造方法或工厂方法创建bean实例

    2)为bean的属性设置值和对其他bean的引用

    3)调用bean的初始化方法

    4)使用bean

    5)当spring容器关闭时,调用bean的销毁方法

    bean后置处理器

    在调用初始化工作前后对bean进行额外的操作

    需要实现BeanPostProcessor接口

    postProcessBeforeInitialization(Object bean, String beanName)在调用init()方法之前调用

    postProcessAfterInitialization(Object bean, String beanName)在调用init()方法之后调用

    srcdaydayMyBeanPostProcessor.java

    package dayday;

    import org.springframework.beans.BeansException;
    import org.springframework.beans.factory.config.BeanPostProcessor;

    /**
    * Created by I am master on 2016/11/29.
    */
    public class MyBeanPostProcessor implements BeanPostProcessor {

    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {

    System.out.println("postProcessBeforeInitialization "+bean+" "+beanName);
    return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {

    System.out.println("postProcessAfterInitialization "+bean+" "+beanName);
    return bean;
    }
    }

    Main/Car.java代码不发生变化

    srcean.xml

    <?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"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <bean id="car" class="dayday.Car" init-method="init" destroy-method="destroy">
    <property name="name" value="Audi"/>
    </bean>
    <!--配置bean的后置处理器-->
    <bean class="dayday.MyBeanPostProcessor"></bean>
    </beans>
    运行结果:
    Car's constructor... setName... postProcessBeforeInitialization [carname=Audi] car init... postProcessAfterInitialization [carname=Audi] car
    [carname=Audi] destroy...



    //调用close()方式是就会调用bean中的destroy()方法
  • 相关阅读:
    ajax提交 返回中文乱码问题
    JAVA spring配置文件总结
    缓存线程池的作用
    myclipse里有感叹号的问题,希望可以帮到各位
    html 鼠标样式 鼠标悬停 小手样式
    在div中注入html代码
    发送邮件的几种方法(C#发邮件 和 js前台实现都有)C#后台自动发邮件 js发邮件
    Angular js 复制粘贴
    C# ASP 面试题 2017
    cocos-lua3.17 cocos studio lua动画使用
  • 原文地址:https://www.cnblogs.com/Hdaydayup/p/6115282.html
Copyright © 2011-2022 走看看