您的位置:首页 > 编程语言 > Java开发

spring框架之ioC

2016-02-14 11:06 351 查看

前言

给读者的话:本篇文章主要讨论spring框架中的ioC(控制反转)。

希望大家多多投入讨论,让我们碰撞出更精彩的思想火花!题外话:【我爱笨媳妇】

什么是ioC

遥想当年,在我们进入这一行的时候所有的高手都告诉我们要谨记一条武林秘诀:那就是“高内聚,低耦合”。可是当年我年少轻狂,如今我回头望去,才发现,这句秘诀的精髓。

好了,废话不多说,下面进入正题:

控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。依赖注入应用比较广泛。

上面的话很官方有莫有,看来我也是多才多艺的,然而,我立志要将逗比发扬到底。下面,我给大家带来一个故事:假如说有A、B两个人是合作关系,A一直在用着B的某些资源,这个时候我们就可以说A对B有着依赖关系,可是有一天,A突然要用别的资源,B没有,那B总得去扩充,这时候,B就得改变自身结构,但是他又怎么去通知A呢?A可能也要做出一定的修改,这种关系放到我们软件开发中的话,就是一种强耦合关系。

如何改善这种情况呢?我们应该将对象的构建交给一个容器去集中处理,这样它们之间的耦合将不复存在,可以说是很弱的耦合关系。那么,问题来了,我们凭啥用spring?好的,重要的事情说三遍,spring帮我们管理了需要的组件,spring帮我们管理了需要的组件,spring帮我们管理了需要的组件,也就是说,妈妈再也不担心我的对象构建的问题了。

话说回来了,今天可是情人节,我们程序员就是方便,没有对象new一个出来。

具体的应用

看问题总要看本质的好不好,我也是很务实的人好不好,那么,现在,就带给大家一个具体的例子:

首先,是我们的A先生出场:

package com.weimob.bean;
/**
* 这就是A,要调用B的
* @author fulei.yang
*
*/
public class UseBean {
private HelloBean hellobean;

public void setHellobean(HelloBean hellobean) {
this.hellobean = hellobean;
}

public void show() {
System.out.println("显示hellobean的消息!");
hellobean.sayHello();
}
}


接下来吗,让我们掌声有请B先生:

package com.weimob.bean;
/**
* B先生来了
* @author fulei.yang
*
*/
public class HelloBean {
private String name;
public HelloBean(String name) {
super();
this.name = name;
}
public void sayHello() {
System.out.println("hello world!");
}
}


最后,请问谁告诉A先生去调用B先生,而B先生又怎会知道谁调用的它呢?不要着急,spring为我们提供了配置文件,搭起了这两者间的信息桥梁,接下来有请:applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> 
<!-- 设置bean的属性:scope="prototype"设置其生成对象方式不是单例模式 -->
<bean id="usebean" class="com.weimob.bean.UseBean">
<property name="hellobean" ref="hellobean"></property>
</bean>
<bean id="hellobean" class="com.weimob.bean.HelloBean"></bean>
<!-- 1:配置对象生成时间(lazy-init="true")2:配置初始化和销毁的方法 -->
<bean id="timebean" class="com.weimob.bean.TimeBean" init-method="init"
destroy-method="destroy"></bean>
</beans>


上面的代码其实很好懂,那即是配置bean,然后使用property标签确定依赖关系,这就是所谓的依赖注入了,好了,最后出场的就是我们亲爱的测试类啦!

// 获取配置文件
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
// 实例化UseBean
UseBean bean = (UseBean) ac.getBean("usebean");
//调用对应方法
bean.show();


结果是什么呢?如下所示:



那么,我们一个ioC的简单例子就这样完成了,当然,关于ioC还有很多的知识点,比如说set方法注入和构造器注入,比较难的点就是集合的注入,还有注解的使用,当然,注解在spring框架中的重要性简直逆天。

总结

spring框架的ioC特性为我们带来了bean组件管理的高效方法,并且实现了消除组件之间的耦合。实在是编程必备之良好工具,但是,话说回来了,这莫好的框架里面的设计思想一定是值得我们学习的,我们不如去看看源码,对我们的进步必是大有裨益!篇幅有限,在此就不再赘述!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: