IoC反转控制,

举个反例:

 //数据操作类
public class DataBase
{
//向数据库中存储数据
public void saveDB()
{
}
}
//业务逻辑类
public class Business
{
//定义数据接口
private DataBase db = new DataBase();
//数据保存
public void saveData()
{
//do something else
//保存数据
db.saveDB();
}
}
//现在修改为向XML文件保存
public class XMLData
{
//向xml中保存数据
public void saveXML()
{
}
}
//这个时候需要重新修改业务逻辑业务逻辑
public class Business
{
private XMLData xml = new XMLData();
//数据保存
public void saveData()
{
//do something esle
//保存数据
xml.saveXML();
}
}

可以看到 这种方法的不方便之处在于更改存储方式的时候,就需要更新全部的逻辑与方法

//定义一个接口
public interface SaveData()
{
public void saveData();
}
//数据操作类
public class DataBase implements SaveData
{
//向数据库中存储数据,实现接口的存储接口
public void saveData()
{
//具体的向数据库中存入数据的逻辑
}
}
//业务逻辑类
public class Business
{
//定义数据接口
private SaveData db;
//定义数据保存类,这里传入的参数实际上是接口的子类,用顶级接口接收
public void setSaveData(SaveData db)
{
//通过向上转型
this.db = db;
}
public void saveData()
{
//do something
this.db.saveData();
}
}
//测试类
public class TestBusiness
{
private Business b = new Business();
public void saveData()
{
.....
b.setSaveData(new DataBase());
}
}

现在的好处就是使Business成为一个工厂,调用者无需关心底部存储的细节,只需要将存储方法设定到business,然后调用保存即可,而且这样一来

扩展也变得容易了,首先编写xml存储方法(继承savedata接口,并且实现存储方法),然后business无需更改,在业务逻辑传递进去xml存储对象即可.

可以看到,这样实现使得代码得到重用,而且增强了扩展性.

依赖注入:原本的方式是业务逻辑控制具体的存储方式,但是面向接口了以后,就不再业务逻辑里面编写具体的存储方式了,而是在调用业务逻辑的类里控制具体的存储方式,也就是上面的,由testbusiness调用业务逻辑的时候,控制了存储方式(原本是业务逻辑设定好存储方式然后供调用),看起来是由具体的存储方式控制了业务逻辑.

注入方式:

  1.set注入,也就是在business中定义一个私有的存储接口变量,然后定义set方法,注入具体的存储方式.

  2.接口注入,具体存储方式与存储接口还是一样,但是在业务逻辑中定义的是业务逻辑接口,然后在这个接口中定义了需要注入的信息(比如定义一个Disavedata(SaveData db)),然后每个业务逻辑都需要去继承这个接口,然后实现这个存储方法,在原本的set方法上,相当于保证了每个业务逻辑都有一个默认的注入方法(可以覆写).

  3,构造注入,跟set方法相比 只是把注入的逻辑放到了business的构造方法里面.

可以看到,无论是采用哪种方法,都需要使用面向接口编程

spring框架IoC的更多相关文章

  1. Spring框架IOC容器和AOP解析 非常 有用

    Spring框架IOC容器和AOP解析   主要分析点: 一.Spring开源框架的简介  二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面 ...

  2. 自己动手写Spring框架--IOC、MVC

    对于一名Java开发人员,我相信没有人不知道 Spring 框架,而且也能够轻松就说出 Spring 的特性-- IOC.MVC.AOP.ORM(batis). 下面我想简单介绍一下我写的轻量级的 S ...

  3. Spring框架IOC容器和AOP解析

    主要分析点: 一.Spring开源框架的简介  二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面向切面编程(AOP)和事务管理配置  一.S ...

  4. spring框架--IOC容器,依赖注入

    思考: 1. 对象创建创建能否写死? 2. 对象创建细节 对象数量 action  多个   [维护成员变量] service 一个   [不需要维护公共变量] dao     一个   [不需要维护 ...

  5. Spring框架---IOC装配Bean

    IOC装配Bean (1)Spring框架Bean实例化的方式提供了三种方式实例化Bean 构造方法实例化(默认无参数,用的最多) 静态工厂实例化 实例工厂实例化 下面先写这三种方法的applicat ...

  6. Spring框架IOC,DI概念理解

    1.什么是框架? 框架是一种重复使用的解决方案,针对某个软件开发的问题提出的. Spring框架,它是一个大型的包含很多重复使用的某个领域的解决方案. Spring的理念:不要重复发明轮子. 2.Sp ...

  7. 【Java框架型项目从入门到装逼】第一节 - Spring框架 IOC的丧心病狂解说

    大家好,好久不见,今天我们来一起学习一下关于Spring框架的IOC技术. 控制反转--Spring通过一种称作控制反转(IoC)的技术促进了松耦合.当应用了IoC,一个对象依赖的其它对象会通过被动的 ...

  8. Spring框架-IOC和AOP简单总结

    参考博客: https://blog.csdn.net/qq_22583741/article/details/79589910 1.Spring框架是什么,为什么,怎么用 1.1 Spring框架是 ...

  9. Spring框架 IOC注解

    Spring框架的IOC之注解方式的快速入门        1. 步骤一:导入注解开发所有需要的jar包        * 引入IOC容器必须的6个jar包        * 多引入一个:Spring ...

  10. Spring框架ioc概括

    什么是Spring且能做什么 Spring是一个开源框架,它由Rod Johnson创建.它是为了解决企业应用开发的复杂性而创建的. Spring使用基本的JavaBean来完成以前只可能由EJB完成 ...

随机推荐

  1. css解决select下拉表单option高度的办法

    css在给select下拉表单设置样式如边框时可以轻松搞定,而我们在不喜欢其默认的下拉箭头的样式时试图通过background:url(图片路径)来修改之,则往往会出现浏览器的兼容性问题,在网上查了好 ...

  2. android api汇集

    参考文章: 知乎-想写个 App 练手,有什么有趣的 API 接口推荐吗? 使用 Espresso 和 Dagger 测试网络服务 http://developer.simsimi.com/apps# ...

  3. firefox如何禁用JavaScript

    1.在Firefox地址栏里输入“about:config”.2.在搜索栏输入“javascript.enabled”查找到首选项.3.点击鼠标右键选择“切换”,把“javascript.enable ...

  4. c# 递归

    递归 函数体内调用自身函数,直到符合某一条件时不再继续调用两个需要满足的条件1.有反复调用自身函数的过程2.有函数的出口,有不再继续执行的条件 练习: 1.用递归函数做n的阶乘. 2.一群羊赶到村庄去 ...

  5. sql 执行 delete 的时候,结合子查询 exists ,怎样支持别名呢?

    在做一个数据删除的时候,条件需要用到关联其他表,用到子查询,但是查询的时候使用 别名 没有问题,但是删除就有语法错误,在网上查询后得到了完美解决: --查询出来需要删除的数据 select * fro ...

  6. 没有Iphone也能装逼:让Android版QQ显示成Iphone6

    在智能手机市场上苹果的iPhone一直都有着很高的关注度,不过其高昂的价格却让人望而却步.有些年轻人为了拥有一部iPhone 不惜出租胸部来做广告位,更有甚者还卖身卖肾.其实这又何苦呢.其实只要小小地 ...

  7. Hibernate的性能优化问题笔记

    性能优化 1.注意session.clear()的运用.尤其是不断分页循环的情况下. a)在一个大集合中进行遍历,遍历取出数据或者对象 b)java会引起内存泄漏吗?在语法上是不可能出现内存泄露的,因 ...

  8. android之消息机制(二)

    消息通道:Looper 首先编写main.xml文件 代码如下: <LinearLayout xmlns:android="http://schemas.android.com/apk ...

  9. IOS第八天(1:UITableViewController团购,数据转模型,xib显示数据)

    ******HMTg.h 模型数据 #import <Foundation/Foundation.h> @interface HMTg : NSObject @property (nona ...

  10. Yii源码阅读笔记(二十三)

    Module类中的辅助功能方法: /** * Returns an ID that uniquely identifies this module among all modules within t ...