Spring 创建对象的流程
1. 故事背景
想象一下,你是一个老板,要开一家公司。公司里有很多员工(对象),每个员工都有自己的职责和依赖关系(比如,程序员需要电脑,销售需要电话等)。传统方式是你自己手动去安排每个员工的工作和工具,但在 Spring 的世界里,有一个超级助手(Spring 容器)帮你搞定这一切。
2. 第一步:告诉助手你需要哪些员工
你需要告诉 Spring 助手,你的公司需要哪些员工,以及他们的职责和依赖关系。你可以通过以下方式告诉助手:
- 写一张清单(XML 配置文件):比如,“我需要一个程序员,他需要一台电脑。”
- 贴标签(注解):比如,在程序员身上贴一个标签,写上“这是程序员,他需要电脑。”
- 口头交代(Java 配置类):比如,直接告诉助手,“帮我招一个程序员,给他配一台电脑。”
3. 第二步:助手开始工作
助手(Spring 容器)拿到你的需求后,开始干活:
- 解析需求:助手会仔细阅读你的清单、标签或口头交代,弄清楚每个员工的具体信息。
- 招人(创建对象):
- 如果员工是单例(Singleton),助手只会招一个人,并且让这个人一直工作,直到公司关门。
- 如果员工是原型(Prototype),助手每次需要的时候都会招一个新的人。
- 配工具(依赖注入):
- 助手会根据员工的需求,给他们配好工具。比如,程序员需要电脑,助手就会把电脑(依赖对象)交给他。
- 工具可以通过以下方式交给员工:
- 构造函数:助手在招人的时候,直接把工具塞到员工手里。
- Setter 方法:助手招到人后,通过一个方法把工具交给员工。
- 直接塞(字段注入):助手悄悄把工具放到员工的办公桌上。
- 培训(初始化):
- 如果员工需要培训(比如程序员需要学习新技术),助手会安排培训(调用初始化方法)。
4. 第三步:员工开始工作
招到人并配好工具后,员工就可以开始工作了。你可以随时调用这些员工来完成公司的任务。
5. 第四步:公司关门(销毁)
当公司关门时,助手会通知所有员工收拾东西离开(调用销毁方法),比如程序员要把电脑还回去。
6. 总结
用一句话概括 Spring 创建对象的流程:
你告诉 Spring 需要哪些对象(Bean)以及它们的依赖关系,Spring 负责创建这些对象、给它们注入依赖、初始化它们,并在不需要的时候销毁它们。
举个例子
假设你有一个 UserService
(用户服务),它需要一个 UserDao
(用户数据访问对象)来操作数据库。你可以这样告诉 Spring:
- XML 配置:
<bean id="userService" class="com.example.UserService"> <property name="userDao" ref="userDao"/> </bean> <bean id="userDao" class="com.example.UserDao"/>
- 注解配置:
@Service public class UserService { @Autowired private UserDao userDao; } @Repository public class UserDao {}
Spring 会:
- 创建
UserDao
对象。 - 创建
UserService
对象,并把UserDao
交给它。 - 初始化
UserService
,让它准备好工作。