名称与标识
- id:使用了约束中的唯一约束。值不能出现特殊字符
- name:没有使用约束中的唯一约束。值可以出现特殊字符
对象的生命周期
init-method
- Bean 被初始化的时候,才会执行
init-method
指定的方法
- 也就是说你指定了一个方法在对象初始化的时候就会调用你指定的这个方法
- 修改
applicationContext.xml
...
<bean id="userDao" class="top.it6666.service.impl.UserDaoMySQLImpl" init-method="save"/>
...
/**
* @author: BNTang
**/
public class UserDaoTest {
@Test
public void save() {
ApplicationContext applicationContext = new FileSystemXmlApplicationContext("F:/Develop/Spring/Spring-IOC/resources/applicationContext.xml");
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
}
}
destroy-method
/**
* @author: BNTang
**/
public class UserDaoTest {
@Test
public void save() {
ApplicationContext applicationContext = new FileSystemXmlApplicationContext("F:/Develop/Spring/Spring-IOC/resources/applicationContext.xml");
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
UserDao userDaoTwo = (UserDao) applicationContext.getBean("userDao");
System.out.println(userDao);
System.out.println(userDaoTwo);
}
}
top.it6666.service.impl.UserDaoMySQLImpl@1e6a3214
top.it6666.service.impl.UserDaoMySQLImpl@1e6a3214
- Bean 被销毁的时候,才会执行该
destroy-method
指定的方法
- 工厂关闭的时候对象才会销毁
- 也就是说你指定了一个方法在对象被销毁的时候,就会调用你指定的这个方法
- 修改
applicationContext.xml
...
<bean id="userDao" class="top.it6666.service.impl.UserDaoMySQLImpl" destroy-method="delete"/>
...
/**
* @author: BNTang
**/
public class UserDaoTest {
@Test
public void save() {
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
// 接口当中是没有close的方法的,必须使用实现类
applicationContext.close();
}
}
Bean的作用范围
scope
- 可以通过
scope
属性进行设置使用的范围,也就是生效的范围
- singleton:默认的,Spring 会采用
单例
的模式创建对象
- prototype:Spring 会采用
多例
的模式创建对象
- request:应用在 web 项目中,Spring 创建这个类以后,会将这个对象存入到
request
范围中
- session:应用在 web 项目中,Spring 创建这个类以后,会将这个对象存入到
session
范围中
- globalsession
- 应用在 web 项目中,必须在
porlet
(基于 Java 的 Web 组件,子域名)环境下使用
- 但是如果没有这种环境,相对于
session
- 修改
applicationContext.xml
...
<bean id="userDao" class="top.it6666.service.impl.UserDaoMySQLImpl" scope="prototype"/>
...
/**
* @author: BNTang
**/
public class UserDaoTest {
@Test
public void save() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
UserDao userDaoTwo = (UserDao) applicationContext.getBean("userDao");
System.out.println(userDao);
System.out.println(userDaoTwo);
}
}
top.it6666.service.impl.UserDaoMySQLImpl@130c12b7
top.it6666.service.impl.UserDaoMySQLImpl@5e600dd5
工厂实例化的方式
无参构造
- 也就是 Spring 工厂内部创建 Bean(对象)的方式
默认
就是无参构造
- 修改
UserDaoMySQLImpl
显示的添加无参构造器并在当中添加一条语句:
/**
* @author: BNTang
**/
public class UserDaoMySQLImpl implements UserDao {
public UserDaoMySQLImpl() {
System.out.println("run default constructor method");
}
...
}
/**
* @author: BNTang
**/
public class UserDaoTest {
@Test
public void save() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDaoMySQLImpl) applicationContext.getBean("userDao");
}
}
run default constructor method
静态工厂实例化
- 修改
applicationContext.xml
...
<bean id="userDao" class="top.it6666.service.impl.UserDaoMySQLImpl" factory-method="createMySQL"/>
...
- 修改
UserDaoMySQLImpl
添加一个静态方法
- 这个方法的返回值是当前类的类型,需要自己手动创建返回

/**
* @author: BNTang
**/
public class UserDaoMySQLImpl implements UserDao {
public static UserDaoMySQLImpl createMySQL() {
System.out.println("run static method");
return new UserDaoMySQLImpl();
}
...
}
/**
* @author: BNTang
**/
public class UserDaoTest {
@Test
public void save() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDaoMySQLImpl) applicationContext.getBean("userDao");
}
}
run static method
实例工厂实例化
- 修改
applicationContext.xml

...
<bean id="userDao" class="top.it6666.service.impl.UserDaoMySQLImpl"/>
<bean id="userMySQL" class="top.it6666.service.impl.UserDaoMySQLImpl" factory-bean="userDao"/>
...
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具