Spring&SpringBoot自动装配

文章目录

  • spring自动装配的好处
  • Spring框架提供了三种自动装配的方式:
  • Springboot自动装配
  • Springboot自动装配的原理

spring自动装配的好处

Spring的自动装配(Autoscan or Autowiring)在开发中带来了多方面的好处,使得应用程序更加灵活、可维护和高效。以下是一些Spring自动装配的好处:

  1. 减少冗余代码:

    • 自动装配可以减少大量的冗余配置代码。开发者不再需要手动在配置文件中一个个地声明Bean和它们的依赖关系,而是通过注解或约定来实现这一点,减少了开发工作量。
  2. 提高开发效率:

    • 自动扫描和装配让开发者能够更专注于业务逻辑的实现,而不用过多关心配置细节。这提高了开发效率,尤其是在大型项目中,可以更迅速地开发和迭代。
  3. 降低错误风险:

    • 手动配置可能导致因为遗漏或错误配置而引发的运行时错误。自动装配通过提供一致的、基于约定的配置方式,减少了这些潜在的错误,提高了应用程序的稳定性。
  4. 易于维护:

    • 自动装配使得应用程序的结构更加清晰,组件之间的依赖关系更加透明。这样一来,当应用程序需要进行修改或扩展时,更容易理解和维护。
  5. 提高可读性:

    • 通过自动装配,开发者可以更容易地理解应用程序的结构和组件之间的关系,因为这些关系往往通过类的注解或命名规范来体现,而不是埋在配置文件中。
  6. 适应变化:

    • 当应用程序的组件结构发生变化时,自动装配能够更灵活地适应这些变化,而不需要手动修改大量的配置。这使得应用程序更容易进行演进和维护。
  7. 更好的集成性:

    • 自动装配有助于提高应用程序的集成性,因为开发者可以更容易地使用第三方库或框架,并且这些库或框架往往已经提供了与Spring自动装配兼容的配置方式。

Spring的自动装配(Autoscan or Autowiring)是指Spring框架通过一些特定的规则,自动为应用程序中的Bean之间建立关联关系,而不需要显式地在配置文件中进行声明。这样可以减少开发者的配置工作,提高开发效率。自动装配是Spring框架中依赖注入(Dependency Injection)的一部分。

Spring框架提供了三种自动装配的方式:

  1. 自动扫描(Component Scanning):

    • 在Spring中,通过使用注解(如@Component@Service@Repository@Controller等)来标识一个类为Spring的组件。
    • Spring容器会自动扫描指定的包,将标有这些注解的类注册为Bean。
    // 例子:使用@Component注解标识一个类为组件
    @Component
    public class MyComponent {
        // 类的实现
    }
    
  2. 自动装配(Autowiring):

    • Spring容器可以根据一定的规则,自动为Bean的属性赋值。
    • 可以通过在属性上使用@Autowired注解实现自动装配。
    // 例子:使用@Autowired注解实现自动装配
    @Component
    public class MyService {
        private MyRepository myRepository;
    
        @Autowired
        public MyService(MyRepository myRepository) {
            this.myRepository = myRepository;
        }
    
        // 其他方法...
    }
    
  3. Java配置类(Java Configuration):

    • 使用@Configuration注解的类可以用来替代XML配置文件,通过@ComponentScan注解开启自动扫描。
    • 使用@Bean注解的方法用于声明Bean,Spring容器会自动调用这些方法来创建Bean。
    // 例子:使用Java配置类实现自动扫描和Bean声明
    @Configuration
    @ComponentScan("com.example")
    public class AppConfig {
        // 其他配置...
    
        @Bean
        public MyService myService() {
            return new MyService(myRepository());
        }
    
        @Bean
        public MyRepository myRepository() {
            return new MyRepositoryImpl();
        }
    }
    

通过以上方式,Spring框架可以在运行时自动装配应用程序中的组件,减少了手动配置的工作,提高了代码的可维护性和灵活性。

Springboot自动装配

Spring Boot是构建在Spring框架之上的一个用于简化Java应用程序开发的框架。它使用约定大于配置的理念,通过默认配置和自动装配来减少开发者的工作。Spring Boot的自动装配是基于Spring框架的自动装配机制的扩展,提供了更多的默认配置和便捷的特性。

以下是Spring Boot中常见的自动装配特性:

  1. 启动类(Application Class):

    • 在Spring Boot应用程序中,通常有一个带有@SpringBootApplication注解的启动类。
    • 这个注解包含了@ComponentScan@EnableAutoConfiguration@SpringBootConfiguration等注解,它们一起提供了自动扫描和自动配置的功能。
    @SpringBootApplication
    public class MyApplication {
        public static void main(String[] args) {
            SpringApplication.run(MyApplication.class, args);
        }
    }
    
  2. 自动配置(Auto-Configuration):

    • Spring Boot提供了大量的自动配置类,它们根据应用的依赖和类路径上的JAR文件自动配置应用的各个组件。
    • 自动配置可以通过@ConditionalOnClass@ConditionalOnMissingBean等条件注解进行条件化,只有在满足一定条件时才会生效。
  3. Properties配置文件:

    • Spring Boot使用application.propertiesapplication.yml文件来配置应用程序。
    • 配置文件中可以指定各种属性,用于控制自动配置的行为。
    # 例子:配置数据库连接信息
    spring.datasource.url=jdbc:mysql://localhost:3306/mydb
    spring.datasource.username=root
    spring.datasource.password=secret
    
  4. 自定义配置:

    • 开发者可以通过自定义配置类,使用@Configuration注解和@Bean注解来添加额外的配置。
    • 这些配置类会被Spring Boot自动扫描并应用。
    @Configuration
    public class MyConfiguration {
        @Bean
        public MyBean myBean() {
            return new MyBean();
        }
    }
    

Spring Boot通过一些合理的默认配置和自动探测,使得开发者可以更专注于业务逻辑而不用过多关心底层的配置细节。在很多情况下,不需要显式地进行配置,Spring Boot就能为你的应用程序提供合适的配置和默认行为。

Springboot自动装配的原理

@SpringBootApplication这个注解是暴露给用户使用的入口,它的底层是由
@EnableAutoConfiguration这个注解来实现的。
一个自动装配的实现,以下三个核心步骤:
整理:Spring Boot组件的依赖注入过程

在Spring Boot中,组件的依赖注入是通过一系列步骤来实现的。以下是关于这个过程的整理:

第一步:声明@Configuration和@Bean

  1. 在启动依赖组件的类中,使用@Configuration注解声明配置类。

    • 这个配置类负责定义一些Bean,并通过@Bean注解将这些Bean注册到Spring IoC容器中。
    @Configuration
    public class MyConfig {
        @Bean
        public MyBean myBean() {
            return new MyBean();
        }
    }
    
  2. 启动类中使用@Import引入配置类。

    • 在启动类或其他配置类中,使用@Import注解引入上述的配置类,确保配置类中的Bean能够被正确加载。
    @SpringBootApplication
    @Import(MyConfig.class)
    public class MyApplication {
        public static void main(String[] args) {
            SpringApplication.run(MyApplication.class, args);
        }
    }
    

第二步:使用第三方Jar包的配置

  1. SPI机制加载配置文件。

    • 如果项目使用了第三方Jar包,Spring Boot采用SPI(Service Provider Interface)机制。在/META-INF/目录下增加spring.factories配置文件,列出需要加载的配置类。
    org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.ThirdPartyAutoConfiguration
    
  2. Spring Boot自动加载配置。

    • Spring Boot会根据约定规则自动使用SpringFactoriesLoader来加载spring.factories配置文件中声明的配置类。

第三步:动态加载配置类

  1. 使用ImportSelector接口。

    • Spring获取到第三方Jar中的配置后,会使用ImportSelector接口来完成动态加载。该接口允许根据条件动态选择需要导入的配置类。
    public class MyImportSelector implements ImportSelector {
        @Override
        public String[] selectImports(AnnotationMetadata metadata) {
            return new String[]{"com.example.DynamicConfig"};
        }
    }
    
  2. 在配置文件中声明使用ImportSelector。

    • spring.factories配置文件中声明使用ImportSelector的类。
    org.springframework.context.annotation.ImportSelector=com.example.MyImportSelector
    

总体而言,通过上述步骤,Spring Boot实现了组件的依赖注入,使得配置类和第三方Jar包中的配置能够被自动加载到应用程序中,提高了开发的灵活性和可维护性。

你可能感兴趣的:(spring,spring,boot,java)