开发者

springboot之自动装配全过程

开发者 https://www.devze.com 2024-08-10 13:27 出处:网络 作者: Persistence is gold
目录1. @SpringBootApplication 注解2. 自动配置(Auto-Configuration)自动配置的实现原理3. 条件装配4. 组件扫描(Component Scan)5. 配置类(ConfaIOLhTiguration Class)6. 使用 @Autowired 注入依赖总结Spring
目录
  • 1. @SpringBootApplication 注解
  • 2. 自动配置(Auto-Configuration)
    • 自动配置的实现原理
  • 3. 条件装配
    • 4. 组件扫描(Component Scan)
      • 5. 配置类(ConfaIOLhTiguration Class)
        • 6. 使用 @Autowired 注入依赖
          • 总结

            Spring Boot 实现自动装配的关键在于其自动配置机制(Auto-Configuration)和基于注解的配置。以下是 Spring Boot 实现自动装编程客栈配的主要原理和步骤:

            1. @SpringBootApplication 注解

            @SpringBootApplication 是一个组合注解,它包含了三个重要的注解:@EnableAutoConfiguration@ComponentSwww.devze.comcan@Configuration

            @SpringBootApplication
            public class MyApplication {
                public static void main(String[] args) {
                    SpringApplication.run(MyApplication.class, args);
                }
            }
            • @EnableAutoConfiguration:启用 Spring Boot 的自动配置机制。
            • @ComponentScan:启用组件扫描,以便找到带有 @Component@Service@Repository@Controller 等注解的 Spring 组件。
            • @Configuration:表明这个类是一个配置类,可以包含 @Bean 定义。

            2. 自动配置(Auto-Configuration)

            @EnableAutoConfiguration 注解触发自动配置。

            Spring Boot 会根据类路径中的依赖、属性文件中的配置以及其他环境变量来判断并自动配置应用所需的 Bean。

            自动配置的实现原理

            Spring Boot 的自动配置机制依赖于 spring.factories 文件,该文件位于 META-INF 目录下。

            这个文件列出了所有的自动配置类(Auto-Configuration Classes)。

            例如,Spring Boot 的 spring-boot-autoconfigure JAR 包中的 spring.factories 文件部分内容:

            org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
            org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
            org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
            org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
            ...

            这些自动配置类会在 Spring 应用上下文初始化时被加载,并根据条件自动配置相应的 Bean。

            3. 条件装配

            自动配置类通常使用条件注解(Conditional Annotations)来控制 Bean 的装配。这些注解包括:

            • @ConditionalOnClass:只有在指定的类在类路径上存在时才会装配 Bean。
            • @ConditionalOnMissingBean:只有在指定的 Bean 不存在时才会装配 Bean。
            • @ConditionalOnProperty:只有在指定的属性存在并具有特定值时才会装配 Bean。

            例如,DataSourceAutoConfiguration 类:

            @Configuration
            @ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class })
            @ConditionalOnMissingBean(Dat编程客栈aSource.class)
            @EnableConfigurationProperties(DataSourceProperties.class)
            @Import({ DataSourcePoolMetadataProvidersConfiguration.class, DataSourceInitializationConfiguration.class })
            public class DataSourceAutoConfiguration {
            
                @Bean
                @ConditionalOnMissingBean
                public DataSource dataSource(DataSourceProperties properties) {
                    // 配置和创建 DataSource
                    return properties.initializeDataSourceBuilder().build();
                }
            }

            4. 组件扫描(Component Scan)

            @ComponentScan 注解启用组件扫描,Spring 会扫描指定包及其子包中的所有组件(带有 @Component@Service@Repository@Controller 等注解的类),并将它们注册为 Spring Bean。

            @SpringBootApplication
            @ComponentScan(basePackages = "com.example.myapp")
            public class MyApplication {
                public static void main(String[] args) {
                    SpringApplication.run(MyApplication.class, argsjs);
                }
            }

            5. 配置类(Configuration Class)

            @Configuration 注解用于定义配置类,这些类可以包含一个或多个 @Bean 方法。

            每个 @Bean 方法定义了一个 Bean,并将其注册到 Spring 应用上下文中。

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

            6. 使用 @Autowired 注入依赖

            Spring 通过 @Autowired 注解实现依赖注入。

            @Autowired 可以应用于构造器、方法和字段,Spring 会自动注入相应的 Bean。

            @Service
            public class MyService {
            
                private final MyRepository myRepository;
            
                @Autowired
                public MyService(MyRepository myRepository) {
                    this.myRepository = myRepository;
                }
            
                // 或者通过字段注入
                @Autowired
                private MyRepository myRepository;
            }

            总结

            Spring Boot 通过一系列注解和条件配置实现了自动装配机制,使得开发者无需手动配置大量的 XML 文件或 Java 配置类。

            自动配置机制利用 spring.factories 文件中的自动配置类,并结合条件注解和组件扫描,实现了灵活且强大的自动装配功能。

            这样,开发者可以专注于业务逻辑的实现,而无需处理繁琐的配置细节。

            以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

            0

            精彩评论

            暂无评论...
            验证码 换一张
            取 消

            关注公众号