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

相关推荐
Victor3561 分钟前
Netty(21)Netty的SSL/TLS支持是如何实现的?
后端
老鼠只爱大米1 分钟前
Java设计模式之代理模式(Proxy)深度解析
java·设计模式·代理模式·proxy pattern·java设计模式·proxypattern
IT_陈寒2 分钟前
Java21新特性实战:5个杀手级改进让你的开发效率提升40%
前端·人工智能·后端
Victor3563 分钟前
Netty(22)如何实现基于Netty的HTTP客户端和服务器?
后端
wepe124 分钟前
FlyEnv---phpstudy平替
java·python·mysql·nginx·php
Echo flower7 分钟前
使用Java将HTML内容转换为Word文档
java·html·word
IT艺术家-rookie7 分钟前
golang-- sync.WaitGroup 和 errgroup.Group 详解
开发语言·后端·golang
一人の梅雨7 分钟前
京东商品详情接口深度解析:从宙斯签名到商详数据价值重构
java·spring cloud·微服务
树下水月9 分钟前
Go语言编码规范
开发语言·后端·golang