Spring IoC 与依赖注入(DI)核心机制解析
在 Spring 框架中,IoC(控制反转)和 DI(依赖注入)是两大基石。理解它们如何协作管理 Bean 的生命周期和依赖关系,是掌握 Spring 开发的关键。
Bean 的定义与命名规则
@Bean 注解的使用
使用 @Bean 方法定义 Bean 时,通常需要配合类级别的注解(如 @Configuration 或 @Component),确保配置类能被容器扫描到。
@Configuration
public class BeanConfig {
@Bean
public User user() {
User user = new User();
user.setName("zhangsan");
user.setAge(18);
return user;
}
}
Bean 名称的生成策略
Spring 根据上下文不同,采用不同的规则生成 Bean 名称:
- 组件注解(@Component/@Service 等):
- 类名前两个字母均为大写(如
HTTPClient),Bean 名等于类名。 - 其他情况(如
UserService),Bean 名为首字母小写的驼峰形式(userService)。
- 类名前两个字母均为大写(如
- @Bean 注解:
- Bean 名直接等于方法名(如
user()生成的 Bean 名为user)。
- Bean 名直接等于方法名(如
可以通过 name 属性自定义名称,支持多个别名:
@Bean(name = {"u1", "user1"})
public User user1() {
// ...
}
简写形式下,单个名称可省略大括号,name= 也可省略:
@Bean("u1")
public User user1() { /* ... */ }
处理多 Bean 冲突
当同一个类型存在多个 Bean 实例时(例如多数据源场景),直接通过类型获取会抛出异常。此时需明确指定目标 Bean。


