SpringIOCDI
1.IOC
1.1.IOC概述
- IOC: Inversion Of Control,简称IOC,也被称为控制反转。对象的创建权由程序员主动创建转移到容器,由容器创建、管理对象,这种思想称为控制反转。这个容器称为IOC容器或Spring容器
- 被IOC容器创建、管理的对象称为Bean对象
- IOC在上面图中对应的就是创建对象放入到容器中
1.2.IOC注解
- 想要在程序启动时将对象交由IOC帮我们创建并放入到容器中,那么我们需要告诉IOC哪些类需要交给它创建并管理,此时就需要在类上打上对应的注解
注解 | 说明 | 位置 |
@Controller | @Component衍生注解,表示使用在控制器类上 | 标注在控制器类上 |
@Service | @Component衍生注解,表示使用在业务类上 | 标注在业务类上 |
@Repository | @Component衍生注解,表示使用在数据访问类上 | 标注在数据访问类上,使用MyBatis框架后不再使用 |
@Component | 声明bean的基础注解 | 不属于以上三类时,使用此注解 |
2.DI
2.1.DI概述
- DI:Dependency Injection,简称DI,也被称为依赖注入。容器为应用程序提供运行时,所依赖的资源,称之为依赖注入
- DI在上面图中对应的就是从容器中找到对象并注入给声明的IStudentService对象
2.2.DI注解
- 想要在IOC将对象创建完成后将Bean对象注入到我们声明的对象中时,需要使用到Spring提供的@Autowired注入注解打到声明对象上就可以实现从容器中自动获取对应实例进行注入
注解 | 说明 | 位置 |
@Autowired | 依赖注入注解 | 标注在需要依赖注入的对象上 |
3.注解常用参数
value属性
在IOC容器中,每一个Bean都有一个属于自己的名字,可以通过注解的value属性指定bean的名字
CompentScan自定义扫描
@Scope注解
作用域 | 说明 |
singleton | 单例作用域,Bean对象默认作用域 |
prototype | 多例作用域,每次注入或者通过Spring应用上下文获取的时候,都会创建一个新的bean实例 |
request | 请求作用域,只适用于SpringMVC框架,了解 |
session | 会话作用域,只适用于SpringMVC框架,了解 |
application | 全局作用域,只适用于SpringMVC框架,了解 |
- proxyMode属性:表示IOC容器要不要为Bean创建代理,如何创建代理,是使用JDK的动态代理还是使用CGLIB
-
- DEFAULT:不为Bean创建代理对象,默认值
- NO:不为Bean创建代理对象
- INTERFACES:使用JDK动态代理为Bean创建代理对象
- TARGET_CLASS:使用CGLIB为Bean创建代理对象
@Lazy注解
- @Lazy注解可以作用在类上,或者方法上,表示Bean对象开启懒加载
- 注意:使用@Lazy的前提是要操作的Bean要使用默认的单例模式,多例Bean无法开启懒加载,因为多例Bean本身就是使用时才创建
- value属性:指定是否开启懒加载
-
- true:开启懒加载,默认值
- false:关闭懒加载
4.依赖注入
属性注入
setter注入
构造器注入
5.多同类型Bean注入
@Primary
- @Primary:当存在多个相同类型的Bean注入时,在要使用的类上加上@Primary注解,来确定默认的实现
- 在StudentAServiceImpl类上加上@Primary
@Qualifier
- @Qualifier注解:指定当前要注入的bean对象。 在@Qualifier的value属性中,指定注入的bean的名称
- @Qualifier注解不能单独使用,必须配合@Autowired使用
@Resource
- @Resource注解:是按照bean的名称进行注入。通过name属性指定要注入的bean的名称