Spring Boot 自动装配原理

核心注解@SpringBootApplication

Spring Boot 自动装配的核心是@SpringBootApplication注解。

它是一个组合注解,包含了@Configuration、@EnableAutoConfiguration和@ComponentScan。

java 复制代码
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

@Configuration

作用:用于标识一个类是一个配置类 ,它可以替代传统的 XML 配置文件来配置 Spring 容器中的 Bean。

被@Configuration注解标记的类内部可以使用@Bean注解来定义各种 Bean,这些 Bean 会被 Spring 容器管理和实例化。

java 复制代码
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AppConfig {

    @Bean
    public MyService myService() {
        return new MyServiceImpl();
    }
}

@ComponentScan

作用:用于指定 Spring 容器扫描组件的基础包路径 ,它会自动扫描被@Component、@Service、@Repository、@Controller等注解标记为component的类,并将它们注册为 Spring 容器中的 Bean。

通过@ComponentScan注解,可以让 Spring 自动发现和管理项目中的各种组件,实现依赖注入等功能。

java 复制代码
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan("com.example.myapp")
public class AppConfig {

}

@EnableAutoConfiguration

@EnableAutoConfiguration是实现自动装配的关键,自动引入配置、依赖。

当 Spring Boot 应用启动时,@EnableAutoConfiguration注解会促使 Spring Boot 去查找类路径下的META-INF/spring.factories文件。这个文件里面配置了很多自动配置类,这些自动配置类都是以xxxAutoConfiguration命名的。

这些自动配置类中大量使用了条件注解。通过这些条件注解,创建并注入bean到容器中。自动配置能够根据项目中实际引入的依赖和已有的配置情况(类是否存在、bean是否存在),灵活地决定是否要进行某些配置。

比如@ConditionalOnClass会判断指定的类是否在类路径下存在,如果存在才会执行相应的配置逻辑;还有@ConditionalOnMissingBean,它会检查容器中是否不存在某个特定的 Bean,如果不存在就会创建并注入相应的 Bean。

最后,当所有的条件都满足时,自动配置类就会创建相应的 Spring Bean,并将它们注入到 Spring 容器中,这样开发人员就无需手动去配置大量的 Spring 组件了,大大简化了开发过程,提高了开发效率。

相关推荐
sunshine22 girl17 分钟前
Java学习一 环境配置2 Idea的入门使用和maven配置,项目启动脚本配置
java·maven
有点。1 小时前
*C++哈夫曼树与哈夫曼编码
java·c++·servlet
子兮曰1 小时前
Bun v1.4.1 深度解析:从 Zig 到 Rust,一场 11 天、64 个 AI 代理的语言迁徙
前端·后端·bun
CRMEB系统商城2 小时前
CRMEB标准版系统(Java)v3.1正式发布
java·spring·微信小程序·php·教育电商
写后端的胖头鱼2 小时前
【高频面试题】Java 基础类型 + 包装类 + String 互相转换
java·开发语言
weixin_460443562 小时前
企业考试系统从.NET迁移到Java+Linux:数据库迁移、接口兼容与灰度切换实践
java·煤矿培训考试系统·煤矿在线考试系统·煤矿安全培训·煤矿考试系统·一人一档
loser.with.m2 小时前
【AgentScope 2.0】05-从数据库配置到可运行 Agent:十个 Builder 开关怎么把一行 JSON 变成 HarnessAgent
人工智能·spring boot·ai
香菜TTT2 小时前
Redis的哨兵机制
java·数据库·redis
withoutfear3 小时前
IntelliJ IDEA卡顿内存分配不足和索引被频繁触发问题解决办法
java·ide·intellij-idea
大圣编蚕3 小时前
Java StringWriter 详解:从入门到实战
java·开发语言·python