Spring中IoC的基本概念(一)

  1. 什么是IoC

    在实际应用的开发当中,需要尽量避免和降低对象之间的依赖关系,即降低耦合度。而Ioc就是解决了一般业务对象之间、业务对象与持久层之间存在的各种依赖关系。
    在没有Ioc的实现中,对象都是由程序的内部代码来控制的。当一个对象需要依赖另一个对象时,用new来创建它的依赖对象去实现两个组件之间的联系,而这种s实现方式会造成组件之间的耦合。
    控制反转(Inverion of Control,IoC)是指在应用程序中对象的创建、销毁等不再由程序本身的编码实现,而是由外部的Spring容器在程序运行时根据需要注入到程序中,也就是对象的生命周期不是由程序本身来决定,而是由容器来控制,所以称之为控制反转。这种控制权转移所带来的好处就是降低对象之间的依赖关系,即解耦。
    2、下面代码实现IoC
    不同的动物各自喜爱的食物不一样,狗吃bone猫吃鱼fish
    (1)创建EatAble
    EatAble接口中定义一个eat方法,实现该接口的对象将提供具体的方法实现。EatAble.java
    public interface EatAble{
    void eat();
    }
    (2)创建一个Animal类实现EatAble接口,提供eat方法实现

public class Animal {
private String animalType;
private String eatMode;

public void setAnimalType(String animalType) {
    this.animalType = animalType;
}

public void setEatMode(String eatMode) {
    this.eatMode = eatMode;
}
@Override
public void eat(){
String msg = animalType + " eat " + eatMode;
System.out.println(msg);
}
}

(3)添加Spring的配置信息
建立Spring的配置文件bean.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:tx="http://www.springframework.org/schema/tx"          xsi:schemaLocation="http://www.springframework.org/schema/beans               http://www.springframework.org/schema/beans/spring-beans-3.0.xsd           
 http://www.springframework.org/schema/tx               http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
 <bean id="animal" class="ioc.Animal">
<property name="animalType">
<value>Dog</value>
</property>
<property name="eatMode">
<value>bone</value>
</property>
</bean>
</beans>

该配置文件的作用是将ioc.Animal类实例化为对象,该对象可以通过id的值animal来获取,设置animalType的属性为Dog,设置其eatMode的属性值为bone。
(4)创建测试类Test
Test.java

public class Test {
public static void main(String[] args) {
    ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
    EatAble animal = (EatAble)ctx.getBean("animal");
    animal.eat();
}
}

这段代码的作用:首先加载Spring容器,然后通过键值animal来获取Animal的JavaBean对象,并将属性赋值;
程序运行的结果是

Dog eat bone

然后再把配置文件改为

<property name="animalType">
<value>Cat</value>
</property>
<property name="eatMode">
<value>fish</value>
</property>

程序运行结果为Cat eat fish
3、通过上面的例子可以看到
(1)除了测试代码之外,所有的程序代码中,并没有依赖Spring中的任何组件。
(2)Animal的animalType和eatAble属性都是由Spring通过读取配置文件动态设置。由于属性是程序运行期间需要时才注入,减少了Animal类对这些属性的依赖,降低了耦合性。
因为Animal累属性的值不少硬编码产生,是由Spring容器注入,不依赖自身和=而依赖外部容器,所以称之为控制反转(IoC);
(3)在不改变Animal类的任何代码情况下,可以通过简单的修改配置文件来实现不同类型Animal的eat行为。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值