SSMSSM
首页
  • 我的博客
  • 我的Github
首页
  • 我的博客
  • 我的Github
  • 1-Java反射技术
  • 1-动态代理模式
  • 1-设计模式简介
  • 1-责任链模式
  • 1-观察者模式
  • 1-工厂模式与抽象工厂模式
  • 1-建造者模式
  • 2-Web开发历史
  • 2-Mybatis核心组件
  • 2-Mybatis的反射
  • 2-Mybatis配置(mybatis-config.xml)
  • 2-映射器(XxxMapper.xml)
  • 2-JDBC and ORM
  • 3-Java修饰符
  • 3-Bean
  • 1.Bean是什么
  • 2.Bean的生命周期
  • 3.创建Bean的方式
  • 4.使用Bean(依赖注入)
  • 5.Bean的作用域
  • 6.Bean的意义

1.Bean是什么

  • Bean是Java对象
  • Bean由Spring容器进行实例化、组装和管理
对比维度Spring Bean普通 Java 对象(POJO)
对象创建Spring 容器通过 反射 创建new 关键字手动创建
创建时机容器启动时或首次使用时(懒加载)代码执行到 new 时
依赖获取依赖注入(DI):自动注入手动 new 或传参
对象组装容器负责装配对象关系开发者自己组装
生命周期管理容器完整托管(创建 → 初始化 → 销毁)JVM 管理内存,逻辑生命周期由代码控制
单例管理默认单例(容器级别)需手写单例模式
作用域singleton / prototype / request / session 等只能靠代码逻辑区分
配置方式注解 / XML / Java Config纯 Java 代码
解耦能力高(面向接口编程)低(强依赖具体实现)
可测试性易于 Mock / 替换实现测试成本高
资源释放自动回调 @PreDestroy手动关闭、易遗漏

2.Bean的生命周期

Spring容器负责Bean的完整生命周期:

实例化 → 属性注入 → 初始化 → 使用 → 销毁

3.创建Bean的方式

// 方式1:注解(最常用)
@Component  // 通用组件
@Controller // Web控制器
@Service    // 业务逻辑层
@Repository // 数据访问层

// 方式2:Java配置类
@Configuration
public class AppConfig {
    @Bean
    public DataSource dataSource() {
        return new DataSource();
    }
}

// 方式3:XML配置(传统方式)
// <bean id="userService" class="com.example.UserService"/>

4.使用Bean(依赖注入)

示例1

@Service
public class OrderService {
    // Spring自动注入UserService Bean
    @Autowired
    private UserService userService;
    
    // 构造器注入(推荐)
    public OrderService(UserService userService) {
        this.userService = userService;
    }
}

示例2

// 容器启动时:
1. 加载配置(XML/注解/Java配置)
2. 解析Bean定义(BeanDefinition)
3. 实例化Bean(调用构造器)
4. 注入依赖(@Autowired等)
5. 初始化Bean(@PostConstruct)
6. 将Bean放入容器Map中管理
7. 处理循环依赖等问题
8. 应用就绪,提供Bean查找服务

// 使用示例:
@RestController
public class MyController {
    // 容器启动时已经准备好了这个Bean
    @Autowired
    private MyService service;  // ← 从容器的Map中取出
}

5.Bean的作用域

Spring提供多种作用域:

  • Singleton(默认):整个应用只有一个实例
  • Prototype:每次请求都创建新实例
  • Request:每个HTTP请求一个实例(Web)
  • Session:每个HTTP会话一个实例(Web)
  • Application:整个ServletContext生命周期

6.Bean的意义

  • 控制反转(IoC):将对象创建的控制权交给容器
  • 依赖管理:自动处理对象间的依赖关系
  • 配置集中化:便于管理和维护
  • 促进松耦合:面向接口编程,易于测试
  • 生命周期管理:统一的初始化和销毁机制
最近更新: 2026/1/6 03:48
Contributors: fireworks99
Prev
3-Java修饰符