spring框架IoC
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的更多相关文章
- Spring框架IOC容器和AOP解析 非常 有用
Spring框架IOC容器和AOP解析 主要分析点: 一.Spring开源框架的简介 二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面 ...
- 自己动手写Spring框架--IOC、MVC
对于一名Java开发人员,我相信没有人不知道 Spring 框架,而且也能够轻松就说出 Spring 的特性-- IOC.MVC.AOP.ORM(batis). 下面我想简单介绍一下我写的轻量级的 S ...
- Spring框架IOC容器和AOP解析
主要分析点: 一.Spring开源框架的简介 二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面向切面编程(AOP)和事务管理配置 一.S ...
- spring框架--IOC容器,依赖注入
思考: 1. 对象创建创建能否写死? 2. 对象创建细节 对象数量 action 多个 [维护成员变量] service 一个 [不需要维护公共变量] dao 一个 [不需要维护 ...
- Spring框架---IOC装配Bean
IOC装配Bean (1)Spring框架Bean实例化的方式提供了三种方式实例化Bean 构造方法实例化(默认无参数,用的最多) 静态工厂实例化 实例工厂实例化 下面先写这三种方法的applicat ...
- Spring框架IOC,DI概念理解
1.什么是框架? 框架是一种重复使用的解决方案,针对某个软件开发的问题提出的. Spring框架,它是一个大型的包含很多重复使用的某个领域的解决方案. Spring的理念:不要重复发明轮子. 2.Sp ...
- 【Java框架型项目从入门到装逼】第一节 - Spring框架 IOC的丧心病狂解说
大家好,好久不见,今天我们来一起学习一下关于Spring框架的IOC技术. 控制反转--Spring通过一种称作控制反转(IoC)的技术促进了松耦合.当应用了IoC,一个对象依赖的其它对象会通过被动的 ...
- Spring框架-IOC和AOP简单总结
参考博客: https://blog.csdn.net/qq_22583741/article/details/79589910 1.Spring框架是什么,为什么,怎么用 1.1 Spring框架是 ...
- Spring框架 IOC注解
Spring框架的IOC之注解方式的快速入门 1. 步骤一:导入注解开发所有需要的jar包 * 引入IOC容器必须的6个jar包 * 多引入一个:Spring ...
- Spring框架ioc概括
什么是Spring且能做什么 Spring是一个开源框架,它由Rod Johnson创建.它是为了解决企业应用开发的复杂性而创建的. Spring使用基本的JavaBean来完成以前只可能由EJB完成 ...
随机推荐
- nodejs模仿http请求组件nodegrass简单例子
1.搭建nodejs环境. 2.执行npm install nodegrass命令. 3.引入模块,var ng= require(nodegrass); 4.下面先看nodegrass底层的get方 ...
- HTML 父窗口打开子窗口,并从子窗口返回值
父窗口:windowdemo.html <html> <head> <title> 接收子窗口返回的内容 </title> <script lan ...
- Android基于XMPP的即时通讯3-表情发送
这篇博文主要讲表情发送的一些东西. 参考:Android基于XMPP的即时通讯1-基本对话 1.准备好资源文件 采用的是emoji的表情,我打包好了,下载地址:http://files.cnblogs ...
- 1022. Digital Library (30)
A Digital Library contains millions of books, stored according to their titles, authors, key words o ...
- ubuntu 安装 wkhtmltopdf 的方法
参考自:http://vivianyw.blog.163.com/blog/static/1345474222014334256367/ wkhtmltopdf有编译好的Linux版本,找到http: ...
- php 将查询出的数组数据存入redis
我们从数据库查询出来的数据一般为数组的形式, 而redis是不支持存入数组的, 一种解决办法是将数组转化为json数据,再将json存入redis,之后取出时再将json转化为php数组. 但将取出的 ...
- HDU2067/HDU1267 /HDU1130 递推
小兔的棋盘 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- Daily Scrum 10.24
昨天我们的工作已经全面开始了,本来想等今天(25号)看那个燃尽图和燃速图能不能出来,结果还是没有,就先把我们的Task统计贴上来吧. 今天的Task统计: 至于燃尽图和燃速图的问题已经发老师邮件提问了 ...
- 第一次scrum meeting 报告
1.第一次scrum meeting确定了我们任务和相应的分配方案,具体分配情况如下: 这是我们团队其中一名成员的任务内容及相应预估时长,其他成员具体分配情况已在TFS上作了相应更新. 第一次scru ...
- 微信公众号内H5调用微信支付国内服务商模式
最近在折微信公众号内H5用JSAPI调用微信支付,境内服务商版支付,微信支付给出的官方文档以及SDK不够详细,导至我们走了一些弯路,把他分享出来,我这边主要是用PHP开发,所以未加说的话示例都是PHP ...