bean的生命周期

生命周期:从创建到消亡的完整过程

bean生命周期:bean从创建到销毁的整体过程

初始化容器:1.创建对象(内存分配)

                     2.执行构造方法

                     3.执行属性注入(set操作)

                     4.执行bean初始化方法

使用bean:1.执行业务操作

关闭/销毁容器:1.执行bean销毁方法

bean生命周期控制:在bean创建后到销毁前做一些事情

提供生命周期控制方法

public class BookDaoImpl implements BookDao{
 
 public void save() {
        System.out.println("book dao save...");
    }
    //表示bean初始化对应的操作
    public void init(){
        System.out.println("init....");
    }
    //表示bean销毁前对应的操作
    public void destory(){
        System.out.println("destory....");
    }
}
   
    

配置生命周期控制方法

<bean id="bookDao" class="com.example.iocdeno04.BookDaoImpl" init-method="init" destroy-method="destory"  />

实现InitializingBean DisposableBean接口

public class BookServiceImpl implements BookService, InitializingBean , DisposableBean  {// 通过接口控制来实现bean生命周期控制
    private BookDao bookDao ;

     public void save(){
         System.out.println("book service save..");
     }

    public void setBookDao(BookDaoImpl bookDao) {
        System.out.println("set....");
        this.bookDao=bookDao;
    }

    @Override
    public void destroy() throws Exception {
        System.out.println("service destory...");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("service init....");
    }
}

BookDao

package com.example.iocdeno04;

public interface BookDao {
    public void save();
}

BookDaoImpl

package com.example.iocdeno04;

public class BookDaoImpl implements BookDao {

    public void save() {
        System.out.println("book dao save...");
    }
    //表示bean初始化对应的操作
    public void init(){
        System.out.println("init....");
    }
    //表示bean销毁前对应的操作
    public void destory(){
        System.out.println("destory....");
    }
}

BookService

package com.example.iocdeno04;

public interface BookService {
    public void save();
}

BookServiceImpl

package com.example.iocdeno04;

import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;

import java.sql.SQLOutput;

public class BookServiceImpl implements BookService, InitializingBean , DisposableBean  {// 通过接口控制来实现bean生命周期控制
    private BookDao bookDao ;

     public void save(){
         System.out.println("book service save..");
     }

    public void setBookDao(BookDaoImpl bookDao) {
        System.out.println("set....");
        this.bookDao=bookDao;
    }

    @Override
    public void destroy() throws Exception {
        System.out.println("service destory...");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("service init....");
    }
}

applicationContext.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: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 https://www.springframework.org/schema/context/spring-context.xsd">

    <bean id="bookDao" class="com.example.iocdeno04.BookDaoImpl" init-method="init" destroy-method="destory"  />
    <bean id="bookService" class="com.example.iocdeno04.BookServiceImpl">
        <property name="bookDao" ref="bookDao"/>
    </bean>
</beans>

AppForCycle

此代码中包含容器的关闭和销毁

ctx.registerShutdownHook()方法是关闭注册钩子,放在代码任何位置任何时刻都可以

ctx.close()方法是销毁容器,如果放在前面,则后续关于bean的操做无法进行

package com.example.iocdeno04;

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

public class AppForLifeCycle {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext  ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        BookDao bookDao =(BookDao) ctx.getBean("bookDao");
        bookDao.save();
        //ctx.registerShutdownHook() ;//关闭钩子  在任何位置时刻都可以

       ctx.close();//关闭容器 相对较为暴力 只能放在最后,若放在前面容器提前关闭,其他操作无法实现

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值