IoC容器相关职责和主要实现

10 篇文章 0 订阅

IoC容器相关职责和主要实现

控制反转有以下几个设计目的

  • 任务执行和实现之间解耦(面向对象的设计思想)

  • 专注于某个模块在实施中的任务(这个模块在任务上的设计目的),即要关注这个模块或设计的最终目标,而不是他的具体实现

  • 将模块从关于其他系统如何做而依赖合同的假设中释放出来,即要释放这个模块,其他系统要知道它是怎么运作,而不是依赖于它的契约。

  • 当更换模块时要预防副作用,一般来说,发生依赖变更时,可能会产生一些相关的副作用,如果是同步调用的形式,这个问题可能会比较明显,如果是IoC的话可能相对不是那么明显。

IoC容器相关职责
  1. 依赖处理,依赖查找和依赖注入主要是两种依赖实现的方式

    1.1 依赖查找,相当于是主动的方式

    1.2 依赖注入,尽管也有主动的方式,但是大部分工作都被容器做了。

    无论依赖查找还是依赖注入,最重要的都是对依赖的处理,如依赖是怎么来的,以及怎么把它返回给客户端来进行处理的,Spring 中主要有以下两种大类:

  • 根据某种规则进行查找,如根据名称或者类型查找

  • 有一些相应的类型转换的方式

  1. 生命周期管理

    2.1 容器相关的生命周期,容器有自己的启动、停止或者暂停,或者终止、或者回滚这样的操作

    2.2 托管的资源的生命周期

    ​ 这里所说的资源并非一定指Java Beans,也可能是其他资源,或者普通的POJO等。如 Spring 容器里一些事件,事件对应的监听器有可能不是对应的bean,可能是外部加进去的,当容器发生事件的时候,可以通过上下文关联一些其他事件的监听,而监听器既不属于bean也不能通过依赖查找或依赖注入的方式去操作,Spring 的 bean 可以当作监听器的一个来源,但是不是唯一的来源,所以托管的资源不一定是Java beans或者所谓的依赖,也包括一些外部化配置,或外部化资源,如 XML Property这样的文件

  2. 配置

    3.1 容器的配置,是控制容器的行为,如容器什么时候启动,有时候容器可以定时启动的,如定时任务,定时任务可能有些子容器的操作,这也是IoC的一部分,IoC是反转控制,定时器也是一种IoC方式,容器会告诉你什么时候执行,你只需要关注你执行的任务就行了,不需要关注它从哪里来。

    3.2 外部化配置,主要是指属性配置,还包含一些XML配置

    3.3 托管的资源(Java Beans 或其他资源),如线程池,配置的一些外部容器,如tomcat,动态的容器等。例如,Spring boot 可以通过嵌入式的方式由 Spring 上下文去影响容器,相反Spring mvc是容器影响到上下文,其中的影响都是相辅相成的。

IoC 容器的主要实现
  1. Java SE

    1.1 Java Beans 依赖查找,Java Beans 是在 Java 1.2的时候就引入到Java API 中,该API是帮助我们来进行bean的管理。Java beans目的不只是为了IoC容器,他还有一些关于GUI相关的扩展。

    1.2 Java ServiceLoader SPI,SPI 机制是从Java 1.6开始引入,该机制被大量用于 NetBeans 中,NetBeans通过这种方式来加载一些所谓的组件。

    1.3 JNDI (Java Naming and Directory Interface) ,Java 命名和目录接口,接口帮助我们查找相应的资源。

    Naming 指 IoC 通过名称的方式来进行依赖查找,directory是说通常采用一种目录的方式,有层次结构,目录也会有一些嵌套。

  2. Java EE

    2.1 EJB(Enterprise Java Beans) ,传统IOC的实现,EJB 1或者2 版本中大部分使用的是依赖查找,从EJB 3.0 开始,依赖注入和依赖查找并存。

    2.2 Servlet,在Java中是web的标准技术,该技术有一些设计模式:如,Model 2的设计模式,特性就是就是通过Java EE Servlet来获取数据库源、线程池、消息服务等,也是通过JNDI 的方式在server容器、EJB容器、Java EE容器里来进行获取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值