Spring(二、配置文件)
Spring配置文件
Spring配置文件是用于指导Spring工厂进行Bean生产、依赖关系注入(装配)及Bean实例分发的"图纸"。Java EE程序员必须学会并灵活应用这份"图纸"准确地表达自己的"生产意图"。Spring配置文件是一个或多个标准的XML文档,applicationContext.xml是Spring的默认配置文件,当容器启动时找不到指定的配置文档时,将会尝试加载这个默认的配置文件。
1.Bean标签基本配置
-
用于配置对象交由Spring 来创建。
-
默认情况下它调用的是类中的无参构造函数。
-
如果没有无参构造函数则不能创建成功。
-
基本属性:
-
id:Bean实例在Spring容器中的唯一标识 (不能重复)
-
class:Bean的全限定名称
<!-- 创建applicationContext.xml --> <bean id="userDao" class="com.xmp.dao.impl.UserDaoImpl"> </bean>
-
2.Bean标签范围配置
scope:指对象的作用范围,取值如下:
取值范围 | 说明 |
---|---|
singleton | 默认值,单例的 (默认) |
prototype | 多例的 |
request | WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中 |
session | WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中 |
global session | WEB 项目中,应用在 Portlet 环境,如果没有 Portlet 环境那么globalSession 相当 于 session |
1)当scope的取值为singleton时
-
Bean的实例化个数:1个
-
Bean的实例化时机:当Spring核心文件被加载时,实例化配置的Bean实例
-
Bean的生命周期:
对象创建:当应用加载,创建容器时,对象就被创建了
对象运行:只要容器在,对象一直活着
对象销毁:当应用卸载,销毁容器时,对象就被销毁了
- 测试
applicationContext.xml (scope="singleton")
<!-- 创建applicationContext.xml -->
<bean id="userDao" class="com.xmp.dao.impl.UserDaoImpl" scope="singleton"> <!-- singleton单例 默认-->
</bean>
测试,打印实例化的对象发现一样
@Test
//测试scope的作用域
public void test() {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao1 = (UserDao) context.getBean("userDao");
UserDao userDao2 = (UserDao) context.getBean("userDao");
System.out.println(userDao1);
System.out.println(userDao2);
}
测试结果:
2)当scope的取值为prototype时
-
Bean的实例化个数:多个
-
Bean的实例化时机:当调用getBean()方法时实例化Bean
-
Bean的生命周期:
对象创建:当使用对象时,创建新的对象实例
对象运行:只要对象在使用中,就一直活着
对象销毁:当对象长时间不用时,被 Java 的垃圾回收器回收了
- 测试
当测试scope的作用域改为prototype时:
3.Bean生命周期配置
3.1 init-method:
指定类中的初始化方法名称
//初始化方法,在实例化对象的时候调用
public void init() {
System.out.println("UserDaoImpl init ......");
}
3.2 destroy-method:
指定类中销毁方法名称
//销毁方法,在销毁对象的时候调用
public void destroy() {
System.out.println("UserDaoImpl destroy ......");
}
(1)关于Spring中对bean生命周期控制提供了两种方式:
-
在配置文件中的bean标签中添加
init-method
和destroy-method
属性 -
类实现
InitializingBean
与DisposableBean
接口,这种方式了解下即可。<!-- 创建applicationContext.xml --> <bean id="userDao" class="com.xmp.dao.impl.UserDaoImpl" scope="prototype" init-method="init" (告诉Spring执行该方法) destroy-method="destroy" (告诉Spring执行该方法) > </bean>
(2)对于bean的生命周期控制在bean的整个生命周期中所处的位置如下:
- 初始化容器
- 1.创建对象(内存分配)
- 2.执行构造方法
- 3.执行属性注入(set操作)
- 4.执行bean初始化方法
- 使用bean
- 1.执行业务操作
- 关闭/销毁容器
- 1.执行bean销毁方法
(3)关闭容器的两种方式:
- ConfigurableApplicationContext是ApplicationContext的子类
- close()方法
- registerShutdownHook()方法
4.Bean实例化三种方式
-
无参构造方法实例化 (常用)
-
工厂静态方法实例化
<!--静态工厂--> <bean id="userDaoFactory" class="com.xmp.Factory.StaticFactory" factory-method="getUserDao"> </bean>
-
工厂实例方法实例化 FactoryBean(实用)
<!--实例工厂--> <bean id="Factory" class="com.xmp.Factory.DynamicFactory"></bean> <bean id="userDaoFactoryDynamic" factory-bean="Factory" factory-method="getUserDao"></bean>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!