博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring IOC整理
阅读量:6831 次
发布时间:2019-06-26

本文共 3554 字,大约阅读时间需要 11 分钟。

示例展示

Spring的一大特点是利用配置的xml文件实现依赖注入。 所谓依赖注入是指把一个业务对象注入另一个业务对象,从而达到对象间的松耦合。(注意是业务对象哦!)

依赖注入讲的通俗一点,就是让一个对象的创建不用new了,可以自动的生产。这其实是利用java里的反射,反射就是在运行时动态的去创建、调用对象。

下面我们来举个例子(具体代码参见右侧源码,只适合菜鸟看)

 

示例场景

场景:现在有个磁盘输出的业务,客户端需要通过2个业务对象进行输出。 一个是通过Floppy(软盘),另一个是通过USB接口。

如果是一般的写法,如果我们要进行磁盘输出业务,必须先new一个USB对象或者软盘对象,进行的次数多了就会非常的重复。
我们要实现一个功能,就是磁盘输出的时候,我们只负责磁盘输出的业务逻辑,至于首先new一个新的Bean的业务和new哪一个新Bean,我们交给xml配置文件管理,这样就可以减少代码的耦合。

 

示例原理图

 

实现步骤

1.首先建立一个设备接口 IDeviceWriter 类。

2.再建立软盘和USB类来实现这个接口,分别是 FloppyWriter 类和 UsbDiskWriter 类。
3.然后建立磁盘业务的JavaBean类,我们简称它为 BusinessBean 。 该Bean有一个成员用于存放设备-writer。 然后有get,set方法和一个核心的磁盘输出业务的方法。
4.业务类完成之后,我们便可以在配置文件 businessFactoryConfig.xml 中进行配置依赖关系了。 (注:bean依赖关键字是ref)。关键代码如下:

5.编写客户端代码,获得Spring中定义的Bean对象,执行save方法,查看磁盘输出时是使用了哪一种方法。

在上面的配置文件中,如果注入了floppy bean,那么是储存至软盘… 如果注入usb bean,那么是储存至移动硬盘…

 

知识准备

什么是IOC?

控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。依赖注入应用比较广泛。
从注入的方法上看,依赖注入主要可以划分为三种类型:属性注入(set注入)、构造函数注入和接口注入。由于接口注入需要额外声明一个接口,增加了类的数目,而且它的效果和属性注入并无本质区别,因此我们不提倡采用这种方式。

 

三种注入方式的区别:

1.属性注入方式:对于需要注入的东西比较明确。符合java的设计规则。更适合java开发人员,使用起来更加自然,更加方便。
2.构造函数注入方式:在类加载的时候,就已经注入依赖的组件。但是若是参数多的话,使用起来不方便。
3.接口注入:组件需要依赖特定接口的实现,其中的加载接口实现和接口实现的具体对象都是由容器来完成。由于需要额外声明一个接口,增加了类的数目,而且它的效果和属性注入并无本质区别,因此我们不提倡采用这种方式。

 

资源准备

1:jar包下载地址:

2.详细学习参考spring参考手册

 

示例

我们使用set注入的方法来实现一个例子,示例的过程见左侧的“示例展示”,下面是源码:

首先建立一个设备接口IDeviceWriter类

1 package demoinfo.spring.ioc;2 3 /**4  * 设备接口5  */6 public interface IDeviceWriter {     7     public void saveToDevice();     8 }
View Code

 

再建立2个设备类

软盘类

1 package demoinfo.spring.ioc; 2  3 /** 4  * 软盘类 5  */ 6 public class FloppyWriter implements IDeviceWriter {      7     public void saveToDevice() {      8         System.out.println("储存至软盘…");      9     }     10 }
View Code

 

USB类

1 package demoinfo.spring.ioc; 2  3 /** 4  * USB类 5  */ 6 public class UsbDiskWriter implements IDeviceWriter {   7     public void saveToDevice() {   8         System.out.println("储存至移动硬盘…");   9     }  10 }
View Code

 

BusinessBean业务类

1 package demoinfo.spring.ioc; 2  3 /** 4  * 磁盘业务的业务JavaBean类 5  */ 6 public class BusinessBean {   7     private IDeviceWriter writer;   8    9     public void setDeviceWriter(IDeviceWriter writer) {  10         this.writer = writer;  11     }  12   13     public IDeviceWriter getDeviceWriter() {  14         return writer;  15     }  16   17     public void save() {  18         if (writer == null) {  19             throw new RuntimeException("DeviceWriter needed...");  20         }  21         writer.saveToDevice();  22     }  23 }
View Code

 

配置文件businessFactoryConfig.xml代码如下:

1 
2
13 14
15
16 17
19
20
21
22
23 24
View Code

 

最后测试类代码如下:

1 package demoinfo.spring.ioc; 2  3 import org.springframework.context.ApplicationContext; 4 import org.springframework.context.support.ClassPathXmlApplicationContext; 5  6 public class SpringDemo {      7     public static void main(String[] args) { 8         //获得Spring中定义的Bean实例(对象) 9         ApplicationContext context = new ClassPathXmlApplicationContext(     10         "classpath:demoinfo/spring/ioc/businessFactoryConfig.xml ");     11         BusinessBean business = (BusinessBean) context.getBean("businessBean");     12         business.save();13     }     14 }
View Code

 

转载地址:http://tcnkl.baihongyu.com/

你可能感兴趣的文章
玩转redis之redis 分片集群方案与实现
查看>>
如何让Redis Server运行更稳定
查看>>
weak_ptr 的 operator== 操作问题
查看>>
IOS写文件
查看>>
mysql小数数据类型
查看>>
js判断input输入保留正整数和两位小数实现方法
查看>>
redisson学习示例
查看>>
升级到 PHP 7.0
查看>>
ITSM--IT服务管理注意细则
查看>>
JAVA中使用代码创建多数据源,并实现动态切换(一)
查看>>
create instance 生成创建虚拟机从nova到调用libvirt流程(pycharm debug):
查看>>
python第二阶段第二天,函数的作用域
查看>>
浅谈MySQL Sharding分片技术
查看>>
php安装
查看>>
linux之ls命令
查看>>
json框架
查看>>
apache启动报错(98)Address already in use: make_sock: could not bind to address [::]:80
查看>>
我的友情链接
查看>>
shorewall 企业防火墙的完美实现
查看>>
nginx反向代理负载均衡
查看>>