Spring容器从启动到关闭的注解使用顺序及说明

Spring容器从启动到关闭的注解使用顺序及说明


1. 容器启动阶段

注解@Configuration@ComponentScan
作用

  • @Configuration:标记配置类,声明Spring应用上下文的配置源。
  • @ComponentScan:扫描指定包下的组件(Bean),自动注册为Spring管理的Bean。
java 复制代码
@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {
    // 配置类内容
}

2. Bean定义与发现阶段

注解@Component@Service@Repository@Controller
作用

  • 标记类为Spring管理的Bean,触发组件扫描机制将其注册到容器中。
java 复制代码
@Service
public class MyService {
    // Service层Bean
}

@Repository
public class UserRepository {
    // 数据库访问层Bean
}

3. 作用域与Bean配置阶段

注解@Scope@Lazy
作用

  • @Scope :定义Bean的作用域(如prototyperequest等,默认singleton)。
  • @Lazy:延迟初始化Bean(在首次使用时创建,而非容器启动时)。
java 复制代码
@Scope("prototype")
@Lazy
public class LazyBean {
    // 原型作用域且延迟初始化的Bean
}

4. 依赖注入阶段

注解@Autowired@Qualifier@Value
作用

  • @Autowired:自动注入依赖的Bean。
  • @Qualifier:解决多Bean同类型时的歧义。
  • @Value :注入配置属性(如application.properties中的值)。
java 复制代码
@Service
public class MyService {
    @Autowired
    @Qualifier("primaryUserDao")
    private UserDao userDao;

    @Value("${app.config.timeout}")
    private int timeout;
}

5. 初始化阶段

注解@PostConstruct
作用

  • 标记方法在依赖注入完成后执行,用于初始化逻辑(如数据预加载)。
java 复制代码
@Service
public class MyService {
    @PostConstruct
    public void init() {
        System.out.println("Bean initialized");
    }
}

6. 容器关闭阶段

注解@PreDestroy
作用

  • 标记方法在容器关闭时执行,用于资源释放(如关闭连接、清理缓存)。
java 复制代码
@Service
public class MyService {
    @PreDestroy
    public void cleanup() {
        System.out.println("Bean destroyed");
    }
}

完整生命周期注解使用顺序表

阶段 注解 作用
容器启动 @Configuration, @ComponentScan 定义配置类并扫描组件,初始化容器
Bean定义 @Component, @Service, etc. 标记类为Spring管理的Bean
作用域与配置 @Scope, @Lazy 定义Bean的作用域和初始化时机
依赖注入 @Autowired, @Qualifier, @Value 自动注入依赖、解决歧义、注入配置属性
Bean初始化 @PostConstruct 在依赖注入后执行初始化逻辑
容器关闭 @PreDestroy 在容器关闭前执行资源清理

关键说明

  1. 顺序依赖

    • @Configuration@ComponentScan 是容器启动的前提条件,必须先定义配置类和扫描路径。
    • @PostConstruct 必须在依赖注入完成后执行,而 @PreDestroy 必须在Bean销毁前执行。
  2. 扩展注解

    • @Primary :在存在多个同类型Bean时,指定默认注入的Bean(需与 @Autowired 配合)。
    • @Profile :按环境(如devprod)选择性注册Bean。
    • @Bean :在配置类中显式定义Bean(需结合 @Configuration 使用)。

总结

Spring容器从启动到关闭的注解使用顺序为:
@Configuration@ComponentScan@Component/Service/...@Scope/@Lazy@Autowired/@Qualifier/@Value@PostConstruct@PreDestroy

通过这些注解,可以清晰地控制Bean的生命周期、依赖关系和作用域,实现灵活的Spring应用管理。

相关推荐
用户214118326360219 小时前
OpenSpec 实战:用规范驱动开发破解 AI 编程协作难题
后端
Olrookie19 小时前
若依前后端分离版学习笔记(二十)——实现滑块验证码(vue3)
java·前端·笔记·后端·学习·vue·ruoyi
LucianaiB19 小时前
招聘可以AI面试,那么我制作了一个AI面试教练不过分吧
后端
倚栏听风雨20 小时前
java.lang.SecurityException异常
java
星河队长20 小时前
VS创建C++动态库和C#访问过程
java·c++·c#
无奈何杨20 小时前
CoolGuard更新,ip2region升级、名单增加过期时间
后端
鼠鼠我捏,要死了捏20 小时前
Java虚拟线程原理与性能优化实战
java·performance-optimization·virtual-thread
艾菜籽21 小时前
Spring MVC练习:留言板
java·spring·mvc
摇滚侠21 小时前
Spring Boot 3零基础教程,WEB 开发 自定义静态资源目录 笔记31
spring boot·笔记·后端·spring
Anthony_492621 小时前
逻辑清晰地梳理Golang Context
后端·go