bean 实例化的三种方式与生命周期

本文详细介绍了Spring框架中构造方法的使用、静态工厂、实例工厂与FactoryBean的区别,以及如何通过配置方法实现bean的生命周期控制。涵盖了从bean的创建、初始化、业务操作到销毁的全过程。
摘要由CSDN通过智能技术生成

构造方法(常用)

  • 提供可访问的构造方法
public class BookDaoImpl implements BookDao {
	public BookDaoImpl() {
		// ...
	}  // 写不写这个空参构造都可以
	
	public void save() {
		// sout();
	}
}
  • 配置
<bean 
	id="bookDao"
	class="com.itheima.dap.impl.BookDaoImpl"
	/>
  • 无参构造方法如果不存在,将抛出异常 BeanCreationException

静态工厂

  • 静态工厂
public class OrderDaoFactory {
	public static OrderDao getOrderDao(){
		return new OrderDaoImpl();
	}
}
  • 配置
<bean 
	id="orderDao"
	factory-method="getOrderDao"
	class="com.itheima.factory.OrderDaoFactory"
	/>

实例工厂与 FactoryBean

  • 实例工厂
public class UserDaoFactory {
	public UserDao getUserDao(){
		return new UserDaoImpl();
	}
}
  • 配置
    userDaoFactory 配合使用,实际无意义
    getUserDao 方法名不固定
<bean id="userDaoFactory" class="com.itheima.factory.UserDaoFactory"/> 

<bean 
	id="userDao"
	factory-mathod="getUserDao"
	factory-bean="userDaoFactory "/>
  • FactoryBean
public class UserDaoFactoryBean implements FactoryBean<UserDao> {
	public UserDao getObject() throws Exception{
		return new UserDaoImpl();
	}
	public Class<?> getObjectType() {
		return UserDao.class;
	}
}
<bean
	id="userDao"
	class="com.itheima.factory.UserDaoFactoryBean"/>

bean 生命周期控制

在 bean 创建后到销毁前做的一些事情

配置方法

  • 提供生命周期控制方法
publci class BookDaoImpl implements BookDao {
	public void save() {
		sout("book dao save");
	}
	public void init() {
		sout("book init");
	}
	public void destory() {
		sout("book destory");
	}
}
  • 配置生命周期控制方法
<bean id="bookDao"
	class="com.itheima.dao.impl.BookDaoImpl"
	init-method="init"
	destroy-method="destory"/>

接口方法

public class BookServiceImpl implements BookService, InitializingBean, DisposableBean {
    private BookDao bookDao;

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

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

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

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

bean 生命周期阶段

  • 初始化容器

    1. 创建对象(内存分配)
    2. 执行构造方法
    3. 执行属性注入(set操作)
    4. 执行bean初始化方法
  • 使用bean

    1. 执行业务操作
  • 关闭/销毁容器

    1. 执行 bean 销毁方法

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值