spring-Bean

发布时间:2026/8/30 4:37:46
spring-Bean Bean是什么Bean 就是 Spring IOC 容器管理的对象交给 Spring 创建、装配、生命周期管理的 Java 对象就叫 Bean自己new出来的对象不属于 Spring Bean。如何定义 Bean三种配置方式Spring 提供三种方式来声明 Bean现在企业开发中注解驱动是主流方式适用场景示例XML 配置老旧遗留系统维护或需要引入第三方无法改源码的类bean iduserDao classcom.dao.UserDao/注解定义最常用自己编写的类直接在类上加注解Component、Service、Repository、ControllerJava 配置类推荐第三方类或需要复杂构造逻辑的 BeanConfiguration Bean 写在方法上Component 和 Bean 区别Component打在类上适合自己写的业务类由组件扫描自动发现。Bean打在配置类的方法上适合第三方组件类源码不能修改无法加 Component。Bean 的作用域 scopeSpring 默认是 单例Singleton。作用域含义适用场景singleton默认整个 IoC 容器中只有一个实例所有地方共用。无状态的 Service、Dao绝大多数业务场景。prototype每次从容器中 getBean() 或注入时都新建一个实例。有状态的对象如每次请求参数不同的实体。request仅对当前 HTTP 请求有效每个请求新建一个。Web 层如当前登录用户信息对象。session仅对当前 HTTP Session 有效。用户会话级别的购物车对象。Bean 完整生命周期解析配置扫描类生成 BeanDefinition实例化反射调用构造方法new 出空对象此时属性还没赋值依赖注入 DI给属性赋值装配 Autowired 依赖Aware 接口回调BeanNameAware、ApplicationContextAware把容器 /beanName 注入给 bean初始化阶段① PostConstruct 注解方法 ② InitializingBean#afterPropertiesSet() ③ Bean(initMethod xxx) 指定初始化方法Bean 就绪可以给业务使用容器关闭销毁 ① PreDestroy ② DisposableBean#destroy() ③ Bean(destroyMethodxxx)BeanDefinition↓实例化↓属性注入↓Aware 回调↓BeanPostProcessor↓初始化↓BeanPostProcessor↓Bean 可以使用↓容器关闭↓销毁解决一个经典难题循环依赖三级缓存如果是单例 BeanSpring 能解决 Setter 注入造成的循环依赖如 A 依赖 BB 依赖 A。它利用的是三级缓存singletonFactories在对象实例化后、属性填充前先把“半成品对象”提前曝光出来从而打破闭环。一级缓存 singletonObjects完全初始化完毕的 Bean二级缓存 earlySingletonObjects实例化完成但还没填充属性的对象避免重复执行代理三级缓存 singletonFactorieslambda 工厂提前暴露对象引用有可能生成代理对象注意构造器注入的循环依赖无法解决Spring 会直接报错。因此官方推荐使用 Setter 注入或字段注入来规避构造器循环依赖。