栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

IOC基础

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

IOC基础

什么是IOC

百度查询即可(控制反转)

IOC主要实现策略来源
  • Using a service locator pattern 服务定位模式( )
  • 依赖注入
    • 构造器注入
    • 参数注入
    • setter注入
    • 接口注入
  • 上下文的依赖查询
  • 模板方法设计模式
  • 策略模式

可以大体分为两种:依赖查找,依赖注入

IOC的轻量级

轻量级的好处:提高部署效率以及减少性能开销
低内存的消耗,不过多的去调用容器API

依赖查找 VS. 依赖注入
类型依赖处理实现便利性代码入侵性API依赖性可读性
依赖查找主动获取相对繁琐侵入业务逻辑依赖容器API良好
依赖注入被动提供相对便利低入侵性不依赖容器API一般
  • 依赖处理:

    • 主动获取:需要指定注入的类型已经包的名称
    • 被动提供:根据某种规则注入,不需要手动去查找(@Autowired)
  • 代码入侵性:当你的代码引入了一个组件,导致其它代码或者设计,要做相应的更改以适应新组件.这样的情况我们就认为这个新组件具有侵入性

  • API依赖性:直接的说法就是需要使用容器中的某个接口,不依赖的话就好比使用setter注入,看不到容器API的调用;

不依赖容器API和不依赖API不代表没有入侵性

构造器注入 VS. Setter注入 构造器注入

Spring的团队鼓励使用构造器注入,但是如果一个类里面的成员参数过多的话,会导致构造器很臃肿,这个时候 就需要考虑重构,使得一个类里面不包含过多的参数。构造器里面的参数建议设置为final,如果注入为空的话,可以使用ObjectProvider

@Component
public class ObjectProviderDemo {
    private  ComponentDemo componentDemo;

    public ObjectProviderDemo(ObjectProvider componentDemo) {
        this.componentDemo = componentDemo.getIfAvailable();
    }
    public void test() {
        componentDemo.eat();
    }
}

在业务开发的时候不推荐使用ObjectProvider,因为可能会导致由启动报错编程业务报错,需要避免业务阶段报错;

Setter注入

优点:

  • Setter注入可用于可选性的注入(选择自己需要注入的字段)
  • Setter可以让对象有一个默认值,并不需要在运行阶段提供属性注入。(Setter Injection works well for objects that have default values, meaning that not all properties need to be supplied at runtime)

缺点:

  • 在setter的时候没有一个初始化的顺序,然后在构造器里面,如果age在name前面那么则会先初始化age

综上所述:大佬更加推荐使用构造器,当对象一旦创建,就并不希望他发生改变

Spring作为IOC容器有什么优势?
  • 典型的IOC管理,依赖查找和依赖注入
  • AOP抽象
  • 事务抽象
  • 事件机制(EventObject, EventListener)
  • SPI扩展
  • 强大的第三方整合
  • 易测试性
  • 更好的面向对象
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/314626.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号