Spring框架之控制反转(IOC)

IOC:控制反转(Inverse of Control)

  • 概念解释

    其实不难理解,所谓控制反转反转控制就是反转了你创建对象或是获得对象的方式,在这之前,我们想要获得一个对象最简单的方法就是new一个

GirlFriend girlfriend = new GirlFriend();

或者我们有想起来在学设计模式的时候见过一个模式
工厂模式:
调用者先找到被依赖对象的工厂,然后通过工厂去获取被依赖对象,最后再调用被依赖对象的方法。
简单来说就是你想要调用一个java对象(被依赖对象)的方法,你得先去一个工厂类里面获取它,然后再调用它里面的方法,而不是直接new一个。

//1、我们先来整一个顶级的女朋友接口
public interface GirlFriend {
	public void say();
}
//2、再整两个不同的实现类
//这是我的女朋友
public class MyGirlfriend implements GirlFriend{
	public void say(){
		System.out.println("null");
	}
}
//其他人女朋友
public class OtherGirlFriend implements GirlFriend{
	public void say(){
		System.out.println("I Love You");
	}
}
//3、我们整个女朋友工厂
public class GirlFriendFactory{
public GirlFriend produce(String type){
	if("my".equals(type)){
		return new MyGirlFriend;
	}else if("other".equals(type)){
		return new OtherGirlFriend;	
	}
}
}
//4、我们开始测试
public class Demo{
	public class test{
		//这里我们先来个工厂
		GirlFriendFactory factory = new GirlFriendFactory();
		GirlFriend myGirlFriend = factory.produce("my");
		myGirlFriend.say();
	} 
}
//结果:  null

我们可以看到,这两种方式其实都是属于硬编码类型的方式,我们都在主动去创建对象,不管是第一种还是第二种耦合都很大,不利于代码的维护升级。我们在学软件工程的时候肯定听过一句话:“低耦合,高内聚”。而Spring的控制反转机制的目标就是这个,在Spring中,它将对象之间的依赖关系转化为用配置文件(xml)来管理,你不用自己去new对象,只需要按要求编写好配置文件,等到需要调用某个对象方法时去跟Spring容器要就可以,这样就完成了所谓的控制反转。
那么到底我们如何利用Spring来完成这一操作,看下面代码演示

  • 代码演示
    假设你已经导包。
//首先我们来个实体类
public class Dog{
	public void bark(){
		System.out.println("wang wang Spring!!");
	}
}

下面我们来一个配置文件,名字不限,但一般约定使用applicationContext.xml
bean标签可以去看我的bean详解,不过这里可以先等等,因为这里主要是为了理解IOC,我们就把它理解为在配置文件里面 “声明了一个dog对象” ,但记住这样理解只是为了理解IOC,当我们学完bean就不能这样理解了。

<?xml version="1.0" encoding="UTF-8"?>
<!--  下面这些是约束-->
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">

	<!-- 将User对象交给spring容器管理 -->
	<!-- Bean元素 -->
	<bean name = "dog" class = "com.test.entity.Dog."></bean>
</beans>

配置文件也有了,我们下面去测试一波

//我们写个测试类
public class Demo{
	//junit单元测试,可以去看我的junit详解
	@Test
	public void test(){
		//1、创建容器对象  我这里applicationContext.xml文件前面没有其他路径名是因为我直接放在了src目录中,如果不是你需要复制完成路径
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");	
		//2、向容器要对象
		Dog dog = (Dog)ac.getBean("dog");
		//3、调用方法
		dog.bark();
	}
}

输出:wang wang Spring!!!
可以看到,在这个示例中,我们并没有涉及到主动new一个对象这种操作,而是让Spring创建,我们去Spring容器里面取就行了,我们只需将xml文件按要求编写即可获得我们想要的对象。

IOC控制反转完毕,喝杯茶歇歇。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

缪恒益

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值