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应用管理。

相关推荐
Mr -老鬼10 分钟前
Rust适合干什么?为什么需要Rust?
开发语言·后端·rust
予枫的编程笔记13 分钟前
【Java集合】深入浅出 Java HashMap:从链表到红黑树的“进化”之路
java·开发语言·数据结构·人工智能·链表·哈希算法
ohoy19 分钟前
RedisTemplate 使用之Set
java·开发语言·redis
mjhcsp19 分钟前
C++ 后缀数组(SA):原理、实现与应用全解析
java·开发语言·c++·后缀数组sa
123445227 分钟前
Agent入门实战-一个题目生成Agent
人工智能·后端
IT_陈寒29 分钟前
Java性能调优实战:5个被低估却提升30%效率的JVM参数
前端·人工智能·后端
快手技术30 分钟前
AAAI 2026|全面发力!快手斩获 3 篇 Oral,12 篇论文入选!
前端·后端·算法
颜酱32 分钟前
前端算法必备:滑动窗口从入门到很熟练(最长/最短/计数三大类型)
前端·后端·算法
8***f39533 分钟前
Spring容器初始化扩展点:ApplicationContextInitializer
java·后端·spring
程序猿零零漆34 分钟前
Spring之旅 - 记录学习 Spring 框架的过程和经验(十四)SpringMVC的请求处理
学习·spring·pandas