Spring 核心基础总结(容器 & 注解开发)(基于黑马ssm网课进行总结)(day3)
Spring 核心基础总结(容器 & 注解开发)
本文依旧参考黑马网课ssm进行总结,上一节课的内容:Spring 中的依赖注入与数据源对象管理详解
📚 目录(点击跳转对应章节)
一、Spring 容器(IoC Container)
二、Bean 相关知识
三、Spring 注解开发
四、Bean 生命周期(重点 ⭐)
五、依赖注入(DI)
六、第三方 Bean 管理(重点 ⭐)
七、@Configuration 注解说明
八、XML 配置 vs 注解配置对比
九、总结
一、Spring 容器(IoC Container)
1️⃣ 什么是 Spring 容器
Spring 容器是 管理对象(Bean)创建、依赖注入、生命周期 的核心组件。
核心思想:
IoC(控制反转) —— 对象的创建和依赖关系由 Spring 容器统一管理,而不是由程序员手动 new。
2️⃣ 创建容器的方式
常见容器接口:
ApplicationContext(推荐,功能更强)BeanFactory(底层接口)

示例:
ApplicationContext ctx =
new ClassPathXmlApplicationContext("applicationContext.xml");
3️⃣ 获取 Bean 对象的方式
BookDao bookDao = (BookDao) ctx.getBean("bookDao");
BookDao bookDao = ctx.getBean(BookDao.class);
BookDao bookDao = ctx.getBean("bookDao", BookDao.class);
二、Bean 相关知识
1️⃣ Bean 的定义
Bean 是由 Spring 容器创建、管理和维护的 Java 对象。
2️⃣ Bean 的作用范围(Scope)
| 作用域 | 说明 |
|---|---|
singleton | 单例(默认) |
prototype | 每次获取都创建新对象 |
request | HTTP 请求级别 |
session | HTTP 会话级别 |
@Scope("singleton")
三、Spring 注解开发
1️⃣ 使用注解定义 Bean

常用注解:
| 注解 | 作用 |
|---|---|
@Component | 通用组件 |
@Service | 业务层 |
@Repository | 持久层 |
@Controller | 表现层 |
@Repository
public class BookDaoImpl implements BookDao {
}
2️⃣ 纯注解开发(无 XML)

核心注解:
@Configuration
@ComponentScan("com.example")
public class SpringConfig {
}
ApplicationContext ctx =
new AnnotationConfigApplicationContext(SpringConfig.class);
四、Bean 生命周期(重点 ⭐)
1️⃣ 生命周期控制注解
-
@PostConstruct:初始化方法 -
@PreDestroy:销毁方法✅ 1.
@PostConstruct作用:
标记一个方法,在 Bean 实例化并完成依赖注入之后,自动调用该方法进行初始化操作。
⚠️ 注意:这个方法会在构造函数执行完、所有依赖注入完成后才被调用。
示例代码中的使用:
@PostConstruct public void init(){ System.out.println("book init ..."); }- 当
BookDaoImpl这个 Bean 被 Spring 容器创建并注入依赖后,会自动调用init()方法。 - 输出:
book init ...
✅ 常用于:
-
打开数据库连接
-
加载配置文件
-
初始化缓存
-
其他需要在 Bean “准备好” 后执行的操作
✅ 2.
@PreDestroy作用:
标记一个方法,在 Bean 被销毁之前 自动调用,用于释放资源或执行清理工作。
⚠️ 注意:只有当容器关闭(如应用停止)或 Bean 被显式销毁时才会触发。
示例代码中的使用:
@PreDestroy public void destroy(){ System.out.println("book destory ..."); }- 当
BookDaoImplBean 被 Spring 容器移除或销毁前,会调用destroy()方法。 - 输出:
book destory ...
✅ 常用于:
- 关闭数据库连接
- 释放文件句柄
- 清理线程池
- 日志记录等收尾操作
- 当
- 当
@PostConstruct
public void init() {
System.out.println("bean init ...");
}
@PreDestroy
public void destroy() {
System.out.println("bean destroy ...");
}
2️⃣ Bean 生命周期流程(Singleton)
-
🔄 整体生命周期流程(以 Singleton Bean 为例)
- 构造函数执行
→BookDaoImpl()被调用
→ 输出:book dao constructor ... - 依赖注入完成
- @PostConstruct 方法执行
→init()被调用
→ 输出:book init ... - Bean 可用(进入运行状态)
- 容器关闭 / Bean 销毁
- @PreDestroy 方法执行
→destroy()被调用
→ 输出:book destory ...
执行构造方法
- 构造函数执行
-
依赖注入完成
-
执行
@PostConstruct -
Bean 就绪
-
容器关闭
-
执行
@PreDestroy
五、依赖注入(DI)
依赖注入 = 由 Spring 容器为 Bean 注入其所依赖的对象或数据。
1️⃣ 引用类型注入(自动装配)
@Autowired
private BookDao bookDao;
- 默认按 类型 装配
- 可结合
@Qualifier按名称注入
2️⃣ 简单类型注入
@Value("Java编程思想")
private String bookName;
3️⃣ 使用配置文件解耦(推荐)
配置文件:
book.name=Spring Boot
Java 中使用:
@Value("${book.name}")
private String bookName;
👉 避免硬编码,降低耦合度。
六、第三方 Bean 管理(重点 ⭐)
1️⃣ 不推荐的方式(耦合高)
DruidDataSource ds = new DruidDataSource();
2️⃣ 使用 @Bean 管理第三方 Bean(推荐)
@Configuration
public class JdbcConfig {
@Bean
public DataSource dataSource() {
return new DruidDataSource();
}
}
3️⃣ 配置类的导入方式
✅ 导入式(推荐)
@Import(JdbcConfig.class)
❌ 扫描式(不推荐)
@ComponentScan
扫描式隐藏性强,容易忘记使用过哪些配置类。
七、@Configuration 注解说明
- 标识当前类是 Spring 配置类
- 替代 XML 配置文件
- 配合
@Bean、@ComponentScan使用
八、XML 配置 vs 注解配置对比

| 对比项 | XML 配置 | 注解配置 |
|---|---|---|
| 可读性 | 一般 | 高 |
| 开发效率 | 低 | 高 |
| 解耦 | 强 | 稍弱 |
| 维护成本 | 高 | 低 |
| 推荐程度 | ❌ | ✅ |
九、总结
✅ Spring 的核心价值:
- IoC:对象创建交给容器
- DI:降低耦合、提升可维护性
- 注解开发:简化配置、提升开发效率
- 生命周期管理:资源统一初始化与释放
📌 最佳实践建议:
- 使用 纯注解开发
- 使用 配置文件 +
@Value管理常量 - 第三方 Bean 使用
@Configuration + @Bean - 避免硬编码,降低耦合度
更多推荐

所有评论(0)