目录
bean的基本配置
- bean
- 类型:标签
- 归属:beans标签
- 作用:定义spring中的资源
- 受此标签定义的资源将受到spring控制
- 格式:
- <beans>
- <bean />
- </beans>
- 基本属性:
- <bean id="beanId" name="beanName1,beanName2" class="ClassName"></bean>
- id:bean的名称,通过id值获取bean
- class:bean的类型
- name:bean的名称,可以通过name值获取bean,用于多人配合时给bean起别名
实例演示:
bean属性scope
- 类型:属性
- 归属:bean标签
- 作用:定义bean的作用范围
- 格式:
- <bean scope="singleton"></bean>
- 取值:
- singleton:(默认)
- 设定创建出的对象保存在spring容器中,是一个单例的对象
- prototype:
- 设定创建出的对象保存在spring容器中,是一个非单例的对象
- request、session、application、websocket:
- 设定创建出的对象放置在web容器对应的位置
实例演示:
- 使用singleton时,只创建一次对象
- 是在加载容器时创建
- 使用prototype时,在获取对象时创建对象,获取一次创建一次
bean的生命周期控制
- 名称:init-method,destroy-method
- 类型:属性
- 归属:bean标签
- 作用:定义bean对象在初始化或销毁时完成的工作
- 格式:
- <bean init-method="init" destroy-method="destroy"></bean>
- 取值:bean对应的类中对应的具体方法名
实例演示:
- singleton:(默认)版
- prototype:版
- 为啥destroy没有出现
- destroy操作其实是运行了的
- 但是程序结束时,虚拟机已经退了,还没来得及释放资源就已经结束了
- 所以看不到
- 通过在虚拟机结束前,强制把容器关了就能看到了(记得把ApplicationContext改为ClassPathXmlApplicationContext)
- 使用prototype;destroy没有出现
- 因为当spring配置的是非单例对象时,它不归spring容器进行管理,没放在容器中
- spring只是帮它new了一下
- 所以关容器和它没有关系
- 使用singleton:(默认),destroy出现
静态工厂与实例工厂创建bean
- 静态工厂版:
- 名称:factory-bean
- 类型:属性
- 归属:bean标签
- 作用:定义bean对象创建方式
- 使用静态工厂的形式创建bean,兼容早期遗留系统的升级工作
- 格式:
- <bean class="FactoryClassName" factory-method="factoryMethodName"></bean>
- 取值:工厂bean中用于获取对象的静态方法名
- 注意事项:
- class属性必须配置成静态工厂的类名
- 实例工厂版:
- 名称:factory-bean,factory-method
- 类型:属性
- 归属:bean标签
- 作用:定义bean对象创建方式
- 使用实例工厂的形式创建bean,兼容早期遗留系统的升级工作
- 格式:
- <bean factory-bean="factoryBeanId" factory-method="factoryMethodName"></bean>
- 取值:工厂bean中用于获取对象的实例方法名
- 注意事项:
- 使用实例工厂创建bean首先需要将实例工厂配置bean,交由spring进行管理
- factory-bean是实例工厂的beanId
实例演示:
- 静态工厂版:
- 构造工厂类
- 配置好配置文件
- 测试成功
- 实例工厂版:
- 构造工厂类
- 配置好配置文件
- 测试发现之前的静态也一同执行了(因为加载配置文件把之前的也加载了)
- 注释掉之前静态的配置再测试测试成功
本文含有隐藏内容,请 开通VIP 后查看