-
IoC容器
- IOC - 控制反转 - 封装内部实现
- DI - 依赖注入 - 非自己主动初始化依赖
- 哪些方面的控制被反转了
- 控制反转 - 获得依赖对象的过程被反转了
- 依赖注入 - IOC容器在运行期间,动态地将某种依赖关系注入到对象之中
-
AOP面向切面 - 利用反射获取代理类的构造函数,并实例化代理类
- JDK动态代理 - 根据类加载器和接口创建代理类
- CGLIB动态代理 - 利用asm开源包
- 两者区别
- JDK动态代理是利用【反射】生成一个实现【代理接口】的【匿名类】
- CGLIB动态代理是利用asm开源包,对代理对象类的【class文件】加载进来,通过修改其【字节码】生成【子类】来处理。
- JDK动态代理必须基于接口,CGLIB动态代理不需要类实现接口
-
常用注解
- @SpringBootApplication - 复合注解、@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan
- @MapperScan - 支持mybatis组件
- @ImportResource @Import @PropertySource - 资源导入注解
- controller层 - @Controller、@RestController、@RequestMapping、@Autowired
- servcie层 - @Service、@Resource
- 持久层 - @Repository、@Component、@Transactional
-
启动原理
- IOC容器 - BeanDefinition - bean - BeanDefinition,保存bean对象的class类型、是否是抽象类、构造方法和参数。
- 初始化一个SpringApplication对象 - 通过SpringFactoriesLoader找到spring.factories文件中配置
- 执行该对象的run方法 - 启动SpringBoot
-
作用域 - scope、限定了Spring Bean的作用范围
- singleton - 仅创建一个实例
- prototype - 创建多个实例
- request - 每次HTTP请求都会创建一个新的Bean
- session - 同一个Session共享一个Bean实例
- global-session - 所有的Session共享一个Bean实例
-
Bean的生命周期
image.png
-
SpringBoot自动配置原理
- Spring Boot关于自动配置的源码在spring-boot-autoconfigure-x.x.x.x.jar
- @SpringBootApplication -> @EnableAutoConfiguration -> @Import(AutoConfigurationImportSelector.class) -> AutoConfigurationImportSelector.selectImports() -> SpringFactoriesLoader.loadFactoryNames() -> 加载META-INF/spring.factories的配置
网友评论