前言:小白学习中,不足之处很多,仅记录一些学习的一些自我见解,还有待完善!
一、三方集成
1.配置优先级:
从加载层面来说yml最先加载,但是会被后加载的所覆盖。所以优先级会低,好像和打枪的那个一样
需要注意的是,配置的优先级是由高到低的顺序,即高优先级的配置会覆盖低优先级的配置。因此,在实际使用中,可以根据需要选择合适的配置方式,并确保配置的优先级符合预期。
2.Bean管理
第三方bean不能做源代码的改动,不能加注解,所以是无法直接用@Component 及衍生注解来声明baan对象,怎么交给IOC管理???这时候就需要用到@Bean注解。
自动配置:pom.xml 配置的第三方依赖当需要用到依赖中的功能时,springBoot一启动就会读写xml文件然后把需要用到的第三方的一些Bean对象交给IOC容器,依赖注入就可以使用。这个过程叫做自动配置。
自动配置原理:
前置知识:@Conditional条件注解 和@ Import导入配置
@Conditional :
作用:按照一定的条件进行判断,需要声明的Bean,在满足给定条件后才会注册到Spring lOC容器中。
以下是子注解
1.@ConditionalOnClass(Deprecated.class) //判断环境中是否有字节码文件,有才会注册Bean到IOC容器中
2.@ConditionalOnMissingBean(name = {"sdfv"}) //环境中有,注册失败 //判断环境中没有对应的bean,才会注册bean到IOC容器中
3.@ConditionalOnProperty(name = "",havingValue = "") //判断环境中是否有对应属性的值。有才注册
@Import
A工程中的一个类交给了IOC容器管理,B工程的测试类想用这个Bean对象,怎么拿???
第一种方式:pom.xml中的坐标是项目的唯一标识。利用这个可以先把A工程打包并交给本地仓库(install就行)。然后在B工程的pom.xml引入A工程的坐标。接着在B工程的测试类注入@Autowired,结果发现还是没有注入进来,是因为启动类的扫描器默认扫描到启动的这个包的及其子包,现在需要手动扫描到A工程才能彻底注入进来使用!!!这种方案不用--麻烦)
第二种方式:使用Import 导入
作用:导入的bean 和配置类会被Spring加载到IOC容器中
导入形式有以下三种
@Import({TokenParser.class, HeaderConfig.class}) //bean类,普通类
@Import({HeaderConfig.class}) //配置文件
@Import({MyImportSelector.class}) //ImportSelector接口子类
重写selectImports 方法:返回的数组装的就是交给ioc管理的Bean