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


所属
bean标签
功能
定义bean的别名 , 可定义多个 , 使用逗号 , 分号 , 空格分隔
范例
 

正常情况下 , 使用id和name都可以获得bean , 但推荐还是使用唯一id 获得bean无论通过id还是name获取 , 如果无法找到则抛出异常NosuchBeanDefinitionException
 
最后我们介绍一下bean的作用范围scope:
类别
描述
名称
scope
类型
所属
bean标签
功能
定义bean的作用范围 , 可选范围如下:
singleton:单列(默认)
prototype:非单列
范例
 
这里的scope指产生对象的数量 我们的scope在默认情况下是singleton , 因为很多对象只需要创建一次 , 多次创建会导致内存膨胀 合适交给容器进行管理的bean(singleton): 表现层对象业务层对象数据层对象工具对象 不合适交给容器进行管理的bean(prototype): 封装实体的域对象(带有状态的bean)
bean实例化 
bean的实例化通常分为四种方法 , 我们在下面一一介绍:
 
  1. 构造方法(常用)
 
我们需要在数据类中提供构造方法 , 配置条件中不需要改变
// 数据类 public class BookDaoImpl implements BookDao { public BookDaoImpl() { System.out.println("book dao constructor is running ...."); } public void save() { System.out.println("book dao save ..."); } }
若无参构造方法不存在 , 则抛出异常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(); } }
  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(); } }
  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 { //代替原始实例工厂中创建对象的方法 // 返回创建对象类型为UserDaoImpl() public UserDao getObject() throws Exception { return new UserDaoImpl(); } // 这里填写接口类型 public Class getObjectType() { return UserDao.class; } // 可以修改来修改其scope属性 public boolean isSingleton() { return false; } }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..."); } }
  1. 接口控制方法(了解)
【一篇文章带你掌握主流基础框架——Spring】 
Spring为创建提供了两个接口 , 我们只需要继承并实现该方法即可
package com.itheima.service.impl; import com.itheima.dao.BookDao; import com.itheima.service.BookService; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; // InitializingBean,DisposableBean 分别对应afterPropertiesSet , destroy方法 , 代表创建和销毁 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"); } }


推荐阅读