SpringBoot IOC
IOC(Inversion of Controller,控制反转)是 SpringBoot 框架的核心。用户只需要用注解声明对象,IOC 容器完成对象的创建和管理。
IOC 容器
Spring 中的 IOC 容器必须实现 BeanFactory 接口。Bean 是 IOC 容器管理的 Java 对象。BeanFactory 接口定义获取 bean 的方法,按类型获取,按名称获取BeanFactory 接口定义 bean 的作用域,是单例对象还是原型对象。
但是 Springboot 中 IOC 容器实现的是 ApplicationContext 接口。它继承 BeanFactory 接口,额外提供环境配置接口,时间发布接口,资源解析接口。
装配 bean
可以用 @Bean 注解将单个对象注入 IOC 容器。也可以用 @ComponentScan 和 @Component 组合批量注册 IOC 容器,@ComponentScan 定义扫描的包范围,
@Component 注解的类被注册到 IOC 容器。
获取 bean
IOC 容器通过依赖注入完成 bean 的装配。@Autowired 注解从容器中找到 bean 进行注入。它首先根据类型找到对应的 bean。如果类型 bean 不唯一,则根据名称匹配 bean。如果仍未找到,则抛出异常。默认情况下 bean 必须存在,required =false
参数允许 bean 不存在。
@Primary 注解和 @Quailfier 注解可以搭配 @Autowired 实现更精确注入对象。
bean 生命周期
IOC 容器管理 bean 的生命周期,在各个阶段提供钩子函数供用户自定义功能。
bean 的生命周期大致分为:定义,初始化,使用,销毁。
定义阶段:Spring 通过 @ComponentScan 定义的路径寻找包含 @Component 的类。然后解析类保存到 BeanDefinition实例,即 bean 的定义。第三步,IOC 容器装载 bean 定义。
之后如果没有配置延迟加载,IOC 容器将初始化 bean。
配置文件
可以在 application.yaml 定义配置属性,Springboot 将自动加载属性。一种使用方法是 @Value 注解,另一种是 @ConfigurationProperties 注解。前者获取单个属性配置,后者装配多个属性配置。
条件装配
@Condition注解条件装配允许用户自定义装载 bean 的过滤条件。
Bean 的作用域
bean的常用作用域有四种:单例,原型,session,aoolication。单例表示容器只存在单例对象。原型表示IOC容器每次都返回新对象。session 和 application 都是 web 概念。
环境配置
@Profile 可以帮助配置不同环境。