spring自动配置的一些理解

A项目和B项目,A项目依赖B项目,然后A项目想要使用B项目的类有几种方式

在 A 项的配置类中手动注册 B 项的 Bean(使用 @Bean 注解)。

// A 项配置类
@Configuration
public class AConfiguration {

    @Bean
    public BService bService() {
        return new BService(); // 创建 B 项的 Bean
    }
}

使用 @Import 注解将 B 项的配置类引入 A 项。(import一般用于配置类, 和@Autowire的区别:@Autowired:用于自动注入

Spring 容器中的 Bean。它是依赖注入的核心,允许 Spring 自动将符合类型的 Bean 注入到其他 Bean 中。也就是说,@Autowired 是在

Spring 容器内部进行依赖注入的工具。

@Import:用于将其他的配置类、组件类或其他 Bean 导入到当前配置类中。它不会直接进行依赖注入,而是注册 Bean 到 Spring 容器

。通常用于将某个类(可能是配置类或组件类)添加到 Spring 容器的上下文中。)

// A 项配置类
@Configuration
@Import(BConfiguration.class)  // 导入 B 项的配置类
public class AConfiguration {
    // 其他配置
}

通过 @ComponentScan 手动扫描 B 项的包。

如果A项目的启动类扫描不到B项目的包,就手动写一下包的位置,把b包的类纳入spring管理

// A 项启动类
@SpringBootApplication
@ComponentScan(basePackages = "com.example.b")  // 手动指定扫描 B 项的包
public class AApplication {
    public static void main(String[] args) {
        SpringApplication.run(AApplication.class, args);
    }
}

使用 Spring Boot 的自动配置机制(如果 B 项中有自动配置类)。

把B项目的配置类写在META-INF的spring.factories的文件里,A项目就可以自动加载该类

自动配置的优点就是标准化,尽可能减少手动配置,缺点:缺乏精细化控制

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.jzo2o.mvc.config.BConfiguration, \
// B 项配置类
@Configuration
public class BConfiguration {
    @Bean
    public BService bService() {
        return new BService();  // 注册 B 项中的类为 Spring Bean
    }
}
posted @ 2025-03-27 20:40  大花生加瓦  阅读(10)  评论(0)    收藏  举报