所属
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的实例化通常分为四种方法 , 我们在下面一一介绍:
- 构造方法(常用)
我们需要在数据类中提供构造方法 , 配置条件中不需要改变
// 数据类 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
- 静态工厂(了解)
我们在之前的案例中存在有对象工厂的说法 , 我们可以设置工厂并调用其方法得到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(); } }
- 实例工厂(了解)
和静态工厂相同 , 但不同点是方法不是静态 , 我们需要提前创建一个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(); } }
- 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创建后到销毁前做一些事情
接下来我们介绍生命周期控制方法:
- 数据层提供控制方法
由数据层提供方法 , 在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..."); } }
- 接口控制方法(了解)
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"); } }
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 柠檬水什么时候喝最好 柠檬水什么时候喝好
- 我想念你(我想念你的句子)
- 黄子韬|黄子韬徐艺洋见家长疑同居,还不承认恋情,再怎么嘴硬都无济于事
- 完美日记|这届双11,完美日记为啥“隐身”了?
- 玄奘有什么身世 ? 玄奘的身世
- 手机导航究竟哪个更好用 手机导航哪个好用
- 指甲白色月牙变少,指甲的月牙白越来越多-
- 戴尔台式机评测 戴尔台式机
- 绿松石|绿松石与藏族金轮
- |艺术家徐耀——淡雅脱俗 赏心悦目