Spring之IOC/DI(反转控制/依赖注入)_入门Demo

在平时的java应用开发中,我们要实现某一个功能或者说是完成某个业务逻辑时至少需要两个或以上的对象来协作完成,在没有使用Spring的时候,每个对象在需要使用他的合作对象时,自己均要使用像new object() 这样的语法来将合作对象创建出来,这个合作对象是由自己主动创建出来的,创建合作对象的主动权在自己手上,自己需要哪个合作对象,就主动去创建,创建合作对象的主动权和创建时机是由自己把控的,而这样就会使得对象间的耦合度高了,A对象需要使用合作对象B来共同完成一件事,A要使用B,那么A就对B产生了依赖,也就是A和B之间存在一种耦合关系,并且是紧密耦合在一起,而使用了Spring之后就不一样了,创建合作对象B的工作是由Spring来做的,Spring创建好B对象,然后存储到一个容器里面,当A对象需要使用B对象时,Spring就从存放对象的那个容器里面取出A要使用的那个B对象,然后交给A对象使用,至于Spring是如何创建那个对象,以及什么时候创建好对象的,A对象不需要关心这些细节问题(你是什么时候生的,怎么生出来的我可不关心,能帮我干活就行),A得到Spring给我们的对象之后,两个人一起协作完成要完成的工作即可。

  所以控制反转IoC(Inversion of Control)是说创建对象的控制权进行转移,以前创建对象的主动权和创建时机是由自己把控的,而现在这种权力转移到第三方,比如转移交给了IoC容器,它就是一个专门用来创建对象的工厂,你要什么对象,它就给你什么对象,有了 IoC容器,依赖关系就变了,原先的依赖关系就没了,它们都依赖IoC容器了,通过IoC容器来建立它们之间的关系。

  这是我对Spring的IoC(控制反转)的理解。DI(依赖注入)其实就是IOC的另外一种说法,DI是由Martin Fowler 在2004年初的一篇论文中首次提出的。他总结:控制的什么被反转了?就是:获得依赖对象的方式反转了

 

*三种注入类型

(1).setter(常用)

(2).接口注入

(3).构造方法

 

*Demo实验:英文字母大小写转换

a.这里选择最常用的注入类型,新建一个项目,引入需要的jar文件,然后创建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:p="http://www.springframework.org/schema/p"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

</beans>

b.创建一个接口类:ChangeLetter,然后在这个接口类里面写一个公共的返回String类型的change()方法,代码如下:

public interface ChangeLetter {

        public String change();

}

c.新建一个小写字母转大写字母的类LowwerLetter,实现ChangeLetter接口,代码如下:

public class LowwerLetter implements ChangeLetter {

        private String str; //设置字符串属性,实现setter方法,为了方便在配置文件中注入

        public void setStr(String str) {

                 this.str = str;

        }

        @Override

        public String change() {

                 //大写字母转小写

                 return str.toLowerCase();

        }

}

d.完成以上步骤后,然后在applicationContext.xml进行属性注入,代码如下:

<bean id="changeLetter" class="com.ansibee.imp.LowwerLetter">

<property name="str">

<value>HIJKLMN</value>

</property>

</bean>

e.现在可以进行测试了,新建一个测试类TestMain,代码如下:

public class TestMain {

 

        public static void main(String[] args) {

ChangeLetter changeLetter = (ChangeLetter)

ApplicationContextUtil.getApplicationContext().getBean("changeLetter");

           System.out.println(changeLetter.change());

}

}

测试类写好后就能进行测试了,run Java Application,观察控制台,发现在配置文件中注入的属性值HIJKLMN变成了小写。

 

posted @ 2017-06-24 15:19  ansibee  阅读(392)  评论(0编辑  收藏  举报