Spring IOCs实现bean的注入
- DL 已经被抛弃,因为他需要用户自己去是使用 API 进行查找资源和组装对象。即有侵入性。
- DI 是 Spring 使用的方式,容器负责组件的装配。
spring IOC设计支持以下功能
- 依赖注入
- 依赖检查
- 自动装配
- 支持集合
- 指定初始化方法和销毁方法
- 支持回调某些方法(但是需要实现 Spring 接口,略有侵入)
Spring 作者 Rod Johnson 设计了两个接口用以表示容器。容器管理着 Bean 的生命周期,控制着 Bean 的依赖注入。
- BeanFactory(BeanFactory 粗暴简单,可以理解为就是个 HashMap)
- ApplicationContext(继承了多个接口。因此具备了更多的功能)
ClassPathXmlApplicationContext 构造过程
- 低级容器 加载配置文件(从 XML,数据库,Applet),并解析成 BeanDefinition 到低级容器中。
- 加载成功后,高级容器启动高级功能,例如接口回调,监听器,自动实例化单例,发布事件等等功能。
- 加载所有的 Bean 配置成 BeanDefinition 到容器中,如果 Bean 有依赖关系,则使用占位符暂时代替。
- 然后,在调用 getBean 的时候,进行真正的依赖注入,即如果碰到了属性是 ref 的(占位符),那么就从容器里获取这个 Bean,然后注入到实例中 —— 称之为依赖注入。
可以看到,依赖注入实际上,只需要 “低级容器” 就可以实现。
这就是 IoC。
springboot 常用实现bean注解
@service 表示Ioc容器中的一个bean,内部属性通过外部注入
@bean 定义容器的一个bean,可以具有一个名字为参数
@component 表示一个组件,组件会依赖其他bean
@autowired 表示会自动注入一个bean,且该bean只有一个
@configuration 表示一个加载类,当访问相关bean时会自动里面定义的bean
SpringbootTest常用注解
@RunWith(SpringRunner.class) @SpringBootTest(classes = {Application.class})// 指定启动类,提供当前上下文环境,可以测试是否加载了Bean