SpringBoot
【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】
SpringBoot 原理篇
文章目录
- SpringBoot
- SpringBoot 原理篇
- 1 自动配置
- 1.15 自动配置原理【1】
- 1.15.1 看源码了
- 1.15.2 @Import({AutoConfigurationPackages.Registrar.class})
1 自动配置
1.15 自动配置原理【1】
1.15.1 看源码了
依赖一个程序来看,
package com.dingjiaxiong;
import com.dingjiaxiong.bean.CartoonCatAndMouse;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Import;
/**
* ClassName: App
* date: 2022/10/25 13:03
*
* @author DingJiaxiong
*/
@SpringBootApplication
@Import(CartoonCatAndMouse.class)
public class App {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(App.class);
CartoonCatAndMouse bean = context.getBean(CartoonCatAndMouse.class);
bean.play();
}
}
运行结果
OK, 结果不重要
整个程序的开始
@SpringBootApplication
这个注解,点击进去看看
可以看到它是若干个注解的组合注解
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
看这三个
意思就是上面那个是下面3个的合体
点进第一个 SpringBootConfiguration
又看@Configuration 里面
主要看这个
然后@Indexed
再看@EnableAutoConfiguration 【自动配置的开关】
点进去
主要就是这两个
看看@ AutoConfigurationPackage
再看@ComponentScan
点进去
基本到头
经过老师的勾勾选选
最后剩了俩
1.15.2 @Import({AutoConfigurationPackages.Registrar.class})
点进Registrar
这个类的功能就是能够按照BeanDefinition 的形式去定义bean ,并且分情况处理
这一节太难做笔记了…
对于这个方法进行断点调试
可以看到这个东西计算出来是我当前的包名
现在这个方法貌似是获取了我的包
原因就在于现在我的程序现在在com.dingjiaxiong 包下,这个程序作为整个应用的入口,它需要扫描它所在的包和其子包【扫哪儿就是这样得到的】
所以,@Import({AutoConfigurationPackages.Registrar.class}) 这个东西设置当前配置所在的包作为扫描包,后续要针对当前的包进行扫描【确认包信息】