1. 依赖注入:
- 一个类,通过构造函数从外部“接收”某对象,称将此对象“注入”到这个类中。
- "注入"到这个类中的对象(更确切地说时注入的类型),就与这个类建立了“依赖(或关联)”关系。
- 由此引入了“依赖注入”的概念,用于描述这种场景。
2. 控制反转
- 直接控制:MyService需要用到MyRepository类的功能,它直接new一个MyRepository 对象,则称MyService直接控制MyRepository。
- IOC容器: 通过引入对象工厂,MyServiceUseFactory和MyRepository之间的“直接依赖”和“直接控制”关系被断开了,转去依赖对象工厂,这就是“IOC(控制反转)”,体现对象之间的“直接控制关系”转化为“间接依赖” 关系。这里的对象工厂,就是“IOC容器”,容器中的对象,都是它生产出来的。
- IOC 和DI的关系: “控制反转” 和“依赖注入” ,前者是一种特性(即:“我只管用,但不负责创建和管理对象,这是由外部另外的对象负责,它把对象创建好后会通知我去取…”),后者是这种特性的一种技术实现手段(即:“IOC这个特性,具体应该怎样用Java实现呢?———使用DI和对象工厂,可以做到这件事情!”)。简单来说控制反转可以通过“依赖注入+对象工厂”实现的。
3。SpringBean:
- Bean的两种主要定义方式:
a. 直接使用@Component 等注解向IOC容器声明——我是一个Bean
b. 对于没有注解的普通类,则需要配合配合使用@Configuration类来定义,Spring中的IOC容器才能识别它。 - 用于提供Bean之间依赖关系的“配置“类型的注解
a. @Configuration: 用于表示“配置类”,包容由相关的配置信息,Springboot 项目在启动是会自动扫面并加载标记有此注解的所有类。
b. @Bean: 在@Configuration 类中附加于特定的方法之上,表示此方法返回读对象将成为一个Spring可以管理的Bean. - 通过@ComponentSan注解扫描特定的包是这一注解最常见的用法,这一注解可以定义过滤器,将特定的包排除在外等等。
- 用@Value 初始化Bean字段的值: 给Bean中的字段添加@Value注解,能为其设置默认值,而且这个值除了直接指定,和爱可以从项目的application.properties文件中提取。
*SpringBean支持的三种依赖注入方式:
a. 构造方法注入(外部对象作为构造方法的参数)
b. 字段注入(字段引用外部对象)
c. 方法注入(外部对象作为方法参数)