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
}
}

浙公网安备 33010602011771号