SpringBoot的自动配置就是当spring容器启动后,一些配置类、bean对象就自动存入到了IOC容器中,不需要我们手动去声明,从而简化了开发,省去了繁琐的配置操作。
web项目中引用了utils-jar包,但是现在直接从IOC容器中却没有获取到,这是因为@SpringBootApplication注解他是默认的去当前包及其子包。
解决方法有两种:
1,手动添加@ComponentScan({"come.example","com.itheima"})
2,使用@Import注解
该注解代入的类会被Spring加载到IOC容器中导入的形式主要有一下几种
2.1 直接代入普通类
2.2 导入配置类
2.3 导入ImportSelector接口实现类
@Import注解的升级版本采用@EnableXxx注解 这个注解是第三方提供的,因为你需要导入那些类 第三放是最清楚的,所有第三方提供了@EnableXxx
他这个注解里面就有@import注解里面导入的就是ImportSelect的接口实现类
直接引入这个enableXxx 来获取需要注入进容器的Bean
2.3的方式是最优雅,简洁的
@SpringBootApplication作为springBoot启动类上的核心注解,可以说是springBoot最重要的一个注解从这个注解开始分析springBoot的原理
点开@springBootApplication会看到下面这个

元注解:是可以注解到注解上的注解,或者说元注解是一种基本注解,但是它能够应用到其他的注解上面。
除了元注解 还有三个最重要的注解
- @SpringBootConfiguration
- @EnableAutoConfiguration
- @ComponentScan

@SpringBootConfiguration注解上存在一个@Configuration注解
@Indexed注解,是用来加速应用启动的(了解即可)。

@Configuration注解上面有@Component注解
> @SpringBootConfiguration注解上使用了@Configuration,表明SpringBoot启动类就是一个配置类。

> @ComponentScan注解是用来进行组件扫描的,扫描启动类所在的包及其子包下所有被@Component及其衍生注解声明的类。
> SpringBoot启动类,之所以具备扫描包功能,就是因为包含了@ComponentScan注解。这里扫描的包路径默认当前包及其子包。
@SpringBootApplication里面包含的三个注解
@SpringBootConfiguration @EnableAutoConfiguration @ComponentScan
其中最核心的注解就是
@EnableAutoConfiguration
该注解封装的自动装配的原理,点进该注解里面可以看到下面的内容

@Import注解将ImportSelector接口的实现类AutoConfigurationImportSelector注入了IOC容器
这行message 提供了两份文件
第一:META-INF/spring-factories文件


第二:
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件


这里的全路径类,都可以自动注入到IOC容器中。
但是这个文件这么多类并不是全部都需要注入到IOC容器中
@Conditional注解 按照一定的条件进行判断 只有满足给定条件才会注册相应的bean到IOC容器中
他本身是一个父注解。
1.@ConditionalOnClass:判断环境中是否有对应字节码文件,才注册bean到IOC容器。

2.@ConditionalOnMissingBean:判断环境中没有对应的bean(类型 或 名称) ,才注册bean到IOC容器。
3.@ConditionalOnProperty:判断配置文件中有对应属性和值,才注册bean到IOC容器。

2001

被折叠的 条评论
为什么被折叠?



