一篇文章带你掌握主流基础框架——Spring( 四 )

若无参构造方法不存在 , 则抛出异常BeanCreationException
  1. 静态工厂(了解)
我们在之前的案例中存在有对象工厂的说法 , 我们可以设置工厂并调用其方法得到bean
// 静态工厂package com.itheima.factory;import com.itheima.dao.OrderDao;import com.itheima.dao.impl.OrderDaoImpl;//静态工厂创建对象public class OrderDaoFactory {public static OrderDao getOrderDao(){System.out.println("factory setup....");return new OrderDaoImpl();}}<?xml version="1.0" encoding="UTF-8"?><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.xsd"><!--方式二:使用静态工厂实例化bean--><bean id="orderDao" class="com.itheima.factory.OrderDaoFactory" factory-method="getOrderDao"/></beans>
  1. 实例工厂(了解)
和静态工厂相同 , 但不同点是方法不是静态 , 我们需要提前创建一个bean
// 实例工厂package com.itheima.factory;import com.itheima.dao.UserDao;import com.itheima.dao.impl.UserDaoImpl;//实例工厂创建对象public class UserDaoFactory {public UserDao getUserDao(){return new UserDaoImpl();}}<?xml version="1.0" encoding="UTF-8"?><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.xsd"><!--方式三:使用实例工厂实例化bean--><bean id="userFactory" class="com.itheima.factory.UserDaoFactory"/><!-- factory-bean:实例工厂本身bean factory-method:使用调用bean的方法 --><bean id="userDao" factory-method="getUserDao" factory-bean="userFactory"/></beans>
  1. FactoryBean(重要实用)
除了我们之前自己定义的工厂外 , Spring提供了一种官方版本的FactoryBean
// FactoryBean工厂(需接口 , < >中填写数据类接口)package com.itheima.factory;import com.itheima.dao.UserDao;import com.itheima.dao.impl.UserDaoImpl;import org.springframework.beans.factory.FactoryBean;//FactoryBean创建对象public class UserDaoFactoryBean implements FactoryBean<UserDao> {//代替原始实例工厂中创建对象的方法// 返回创建对象类型为UserDaoImpl()public UserDao getObject() throws Exception {return new UserDaoImpl();}// 这里填写接口类型public Class<?> getObjectType() {return UserDao.class;}// 可以修改来修改其scope属性public boolean isSingleton() {return false;}}<?xml version="1.0" encoding="UTF-8"?><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.xsd"><!--方式四:使用FactoryBean实例化bean--><bean id="userDao" class="com.itheima.factory.UserDaoFactoryBean"/></beans>bean生命周期我们先来接单介绍生命周期相关概念:
  • 生命周期:从创建到消亡的完整过程
  • bean生命周期:bean从创建到销毁的整体过程
  • bean生命周期控制:在bean创建后到销毁前做一些事情
接下来我们介绍生命周期控制方法:
  1. 数据层提供控制方法
由数据层提供方法 , 在xml配置文件中设置该方法
// 数据层package com.itheima.dao.impl;import com.itheima.dao.BookDao;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...");}}

经验总结扩展阅读