关于Spring中IoC的一些理解

Spring

为什么用spring

解决企业开发的难度,减轻对项目模块之间的管理,类和类之间的管理,帮助开发人员创建对象,管理对象之间的关系。

spring核心技术

IOC,AOP主要目的是为了实现模块之间的解耦合。

spring的优点

  • 轻量
  • 针对接口编程,解耦合
  • AOP编程支持
  • 方便集成各种优秀的框架

spring体系结构

Spring体系结构图

什么是IoC

IoC(Inversion of Control):控制反转,意思是将对象创建,赋值,管理的工作都交给代码之外的容器进行实现,也就是对象的创建是由其他外部资源完成的

控制:创建对象,对象属性的赋值,对象之间的关系管理
反转:把原来的开发任意创建对象的权限,转移给代码之外的容器进行实现。由容器代替开发人员管理对象,创建对象,给对象赋值。
正转:由开发人员使用new构造方法创建对象,开发人员主动管理对象。

IoC的技术实现

Spring容器帮我们管理着一系列的类,我们只需要在使用时向Spring去索取对应的类。

IoC是通过DI(Dependency Injection): 依赖注入来实现的

Spring是使用DI(Dependency Injection)来实现IoC的功能

  • 主要方式:1.set方式注入 2.构造器注入 3.字段注入
  • 注入类型:1.值类型注入 2.引用类型注入

在使用字段注入时,弹出警告Field injection is not recommended

这是因为Spring官方和IDEA都并不推荐使用字段注入。因为字段注入存在一些缺陷

对象的外部可见性

在一个类中通过字段注入其中的私有变量,那这个私有变量仅仅能在该类中被使用,脱离了容器环境无法访问该实例。
字段注入类和容器的耦合度过高,我们无法脱离容器来使用目标对象。

可能导致潜在的循环依赖

循环依赖是指两个类之间互相进行注入
在这里插入图片描述

在这里插入图片描述

不允许声明不可变域

即字段注入对于final修饰不起作用,因为这些字段必须在类实例化时实例化。声明不可变域唯一的方法是构造器注入

构造器注入是spring官方推荐的依赖注入类型,它有哪些特性

spring官方原文对构造器注入的描述

The Spring team generally advocates constructor injection as it enables one to implement application components as `immutable objects` and to ensure that required dependencies are not null.
Furthermore constructor-injected components are always returned to client(calling) code in a fully initialized state.

核心意思为,构造器注入能保证注入组件不可变,并且确保需要的依赖不为空。即解决字段注入外部不可见性的问题。
另外,使用构造器注入能在运行前报错,从而提醒避免循环依赖。

Setter方法注入

虽然构造器注入能解决字段注入的问题但是,当构造器参数过多时,会使得代码显得冗长,降低可读性和可维护性。这时可以引入set方法注入。
Setter方法注入更加灵活,能够实现按需注入。

Spring中Bean作用域(scope属性)

Spring中Bean的作用域主要有五种作用域

单例作用域Singleton 不管Bean的引用有多少个,都只创建一个Bean实例。对于无状态的Bean应该使用单例
原型作用域Prototype 每次请求
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值