最后我们介绍一下bean的作用范围scope:
类别描述名称scope类型标签所属bean标签功能定义bean的作用范围,可选范围如下:singleton:单列(默认)prototype:非单列范例<bean id="bookDao" name="dao" class="com.itheima.dao.impl.BookDaoImpl" scope="prototype"/>
这里的scope指产生对象的数量bean实例化bean的实例化通常分为四种方法,我们在下面一一介绍:
我们的scope在默认情况下是singleton , 因为很多对象只需要创建一次,多次创建会导致内存膨胀
合适交给容器进行管理的bean(singleton):
不合适交给容器进行管理的bean(prototype):
- 表现层对象
- 业务层对象
- 数据层对象
- 工具对象
- 封装实体的域对象(带有状态的bean)
- 构造方法(常用)
// 数据类public class BookDaoImpl implements BookDao {public BookDaoImpl() {System.out.println("book dao constructor is running ....");}public void save() {System.out.println("book dao save ...");}}
<?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="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/></beans>
若无参构造方法不存在 , 则抛出异常BeanCreationException
- 静态工厂(了解)
// 静态工厂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>
- 实例工厂(了解)
// 实例工厂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>
- 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生命周期我们先来接单介绍生命周期相关概念:推荐阅读
- 怎么玩军棋(军棋新手教程)
- ipad怎么打开分屏(ipad怎么分屏打游戏)
- ipad分屏怎么恢复(ipadair2能不能分屏)
- ipad如何打开分屏模式(ipad分屏取消的方法)
- ipad分屏怎么打开(ipad第九代分屏功能)
- ipad如何设置分屏(ipad九代分屏操作方法)
- iPad分屏怎么用(ipadpro怎么分屏)
- ipad如何左右分屏(ipad第五代可以分屏吗)
- 手机指南针怎么看(指南针怎么看方向)
- 指南针怎么看方向(指南针罗盘)