SpringBoot 源码分析

76 阅读2分钟

SpringBoot自动装配原理

1.springboot所有自动配置都是在启动的时候扫描并加载:
spring.factories所有的自动配置类都在这里面,但是不一定生效,要判断条件是否成立,只要导入了对应的start,就有对应的启动器了,有了启动器,我们自动装配就会生效,然后配置成功
(1):springboot在启动时,从类路径下/META-INF/spring.factories获取指定的值
(2):将这些自动配置的类导入容器,自动配置就会生效,帮我们进行自动配置
(3):整合JavaEE,解决方案和自动配置的东西都在spring-boot-autoconfigure-2.2.0.RELEASE.jar
(4):它会把所有需要导入的组件,以类名的方式返回,这些组件就会被添加到容器
(5):容器非常多的xxxAutoConfiguration的文件,就是这些类给容器中导入了组件

xxxAutoConfiguration:自动配置类:给容器中添加组件
xxxProperties:封装配置文件中相关属性

自动装配类必须在一定条件下才能生效 @Conditional作用:必须是@Conditional指定条件成立,才给容器添加组件,配置里面的内容生效

Spring中有两个id相同的bean,会报错吗?

答:在同一个xml配置文件里 不能存在两个id相同的bean 否则spring在启动的时候会报错 问题发生在spring对xml文件进行解析 转化为BeanDefinition的一个阶段
在spirng3之后 @Configuration 取代了xml的配置形式 如果在在同一个配置类声明多个相同名字的Bean 只会注册第一个声明Bean的一个实例 后面相同名字的实例不会再注册
如果使用@Autowired 会发生找不到第二个实例 如果使用@Resource名称注入 会发生类型类型不匹配的错误

image.png

JSR303数据校验:@Validated 保证数据的准确性

SpringBoot的自动装配原理2

自动装配简单来说就是 自动的把第三方组件的bean装载到ioc容器里面 不需要开发人员再去写bean相关的配置 在springboot中只需要加上@SpringBootApplication 就可以实现自动装配 这个注解是一个复合注解 真正实现自动装配的是@EnableAutoConfiguration

Spring中的BeanFactory和FactoryBean的区别?

BeanFactory:
1.是所有spring bean容器的顶级接口,他为spring的容器定义了一套规范,并提供像getBean这样的方法从容器中获取指定的bean实例
2.BeanFactory在产生bean的同时,还提供了解决bean之间的依赖注入的能力,也就是DI

FactoryBean:
是一个工厂bean 是一个接口 动态生成bean实例 我们可以自定义一个bean 并且加载到ioc容器 它里面有一个方法getObject() 就是用来实现动态构建bean的一个过程