zoukankan      html  css  js  c++  java
  • Spring控制反转(依赖注入)的最简单说明

    1.常规方式实现实例化

    1.1已有角色如下:

    一个接口Interface,两个接口实现类InstatnceA、InstanceB,一个调用类User

    1.2当前User类实例化InstanceA如下:

    Interface interface = new InstanceA(); #User类中的实例化代码

    1.3欲修改如下:

    现在想把实例化对象改为InstatnceB而不要实例化InstanceA

    1.4User类代码修改如下:

    Interface interface = new InstanceB(); #修改后的User类中的实例化代码,由InstanceA修改为了InstanceB

    1.5总结:

    User控制实例化哪个类(是实例化InstanceA还是InstanceB);当我们想修改实例化的类时必须去修改User中的代码。

    2,.控制反转实现实例化

    2.1已有角色如下:

    一个接口Interface,两个接口实现类InstatnceA、InstanceB,一个调用类User,还有一个bean.xml(其维护一个Instance的id与InstanceA和InstanceB的对应关系)

    2.2当前实例化InstanceA如下:

    Interface interface = new Instance(); #User类中的实例化代码
    <bean id="Instance" class="com.test.core.InstanceA"></bean> #bean中的映射关系

    2.3欲修改如下(和1.3一样):

    现在想把实例化对象改为InstatnceB而不要实例化InstanceA

    2.4代码修改如下:

    Interface interface = Instance(); #User类中的实例化代码,并不需要修改
    <bean id="Instance" class="com.test.core.InstanceB"></bean> #对应关系为Instance--InstanceA变更为instance--InstanceB

    2.5总结

    spring控制实例化哪个类(是实例化InstanceA还是InstanceB);当我们想修改实例化的类时只要去修改bean.xml中的映射关系,而不用去User修改代码

    3.依赖注入

    User要实例化一个对像就需要一个类(InstatnceA或InstanceB)这就是一种依赖,控制反转后真正依赖的类(即要实例化的类)由beans.xml注入到User类。

    依赖注入就是控制反转的别名,依赖注入侧重描述目地控制反转侧重描述现像(所以有时会见到依赖注入比控制反转给为准确的说法)。

    4. MVC、IOC和ORM

    SSH框架是Java Web的基石,而其中Struts核心概念是MVC、Spring的核心概念是IOC和Hibernate的核心概念是ORM,围绕这六个(或者叫三个)名词诞生了一本又一本让人看到想放弃的Java Web书藉。

    其实抛开配置等细节问题仅从思想角度来看,MVC、IOC和ORM就是一回事,其本质都是将原本的“A调用B”模式解耦为“A通过xml调用B”的模式,以降低A和B强耦合导致的牵一发而动全身的问题(就是A或B修改后,工程中所有B或A的代码都要修改)。

    另外,SSH可能会死(被别的框架取代),但是MVC、IOC和ORM永远不会死;但又反过来说到别的框架上MVC、IOC和ORM道理还是一样的,不过换个xml文件或使用其他形式实现这些功能罢了。

    框架 核心概念 A xml B xml作用
    Struts MVC 前端web页面 struts.xml 后端表单处理类 struts.xml控制了前端页面实际会被推送到的类,当A/B有修改一般对此xml稍作调整即可
    Spring IOC new class的代码 beam.xml class本身 beam.xml控制了new class会真正被实例化的类,当A/B有修改一般对此xml稍作调整即可
    Hibernate ORM table.hbm.xml 数据库表 table.hbm.xml控制了类属性与数据表的列的对应关系,当A/B有修改一般对此xml稍作调整即可

    参考:

    https://www.cnblogs.com/whgk/p/6074930.html

  • 相关阅读:
    CSS3旋转动画
    CSS3的动画属性
    CSS选择器
    JS事件委托
    js 轮播图效果
    JS事件冒泡和事件捕获
    JS自定义播放器
    js闭包for循环只执行最后一个值得解决方法
    交通红绿灯
    汉明距
  • 原文地址:https://www.cnblogs.com/lsdb/p/6905342.html
Copyright © 2011-2022 走看看