对于IOC的学习一直都不体系化,导致自己迷惑,只知道“依赖注入“这四个挂在嘴边的字符串。通过学习并结合自己目前的理解来看,IOC就像是一种解耦合的技术。通过配置文件将两个对象之间的依赖降低。之所以说IOC容器是因为IOC技术的体现主要是在xml中,而xml则是一种数据存储的结构,所以提到IOC时总是和容器相联系。

      之前对IOC学习时,写过一篇从感性人数《Ioc:从自助和回转火锅看控制反转》,初次学习的可以看看,不同角度不同理解。

     下面通过一个运用IOC原理的Demo演示一下IOC的强大:

     实现思路:

                  类A  +  XML配置文件配置A的信息 + 应用程序调用类A。

      解释:应用程序调用某类A 时,一般会实例化A ,然后使用A的方法或属性,要知道实例化其实就是分配了新的空间,这其实就已经建立了强依赖,该应用程序和类A的实例具有相同的生命周期。但是如果使用IOC进行配置就不一样了,下面是demo,比较简单,但是能看出区别。


Java 类 :HelloWorld.java

<span style="font-family:Verdana;font-size:14px;">Package com.gc.action;
Public class HelloWorld{
 
     PublicString msg=null;
    Public void setMsg (String msg){
    
           This.msg=msg;
}
 
Public StringgetMsg(){
 
       Return this.msg;
}
}
 
</span>
 


Xml :Config.xml


<span style="font-family:Verdana;font-size:14px;"><?xml version=”1.0” encoding=”UTF-8”>
<!DOCTYPE beans PUBLIC “-//SPRING//DTDBEAN//EN”
http://www.springframework.org/dtd/spring-beans.dtd>
<beans>
<bean id =”HelloWorld”class=”com.gc.action.Helloworld”>
    <property name=”msg”>
       <value>HelloWorld</value>
   </property>
</bean>
</beans></span>


        其中bean id 表示该类的名称,class为该类的地址来源。

        Property 内的name=msg表示类helloworld中定义的msg,value值为为该类msg注入的字符串。


 

测试程序:TestHelloWorld.java


<span style="font-family:Verdana;font-size:14px;">Package com.gc.test;
Importorg.springframework.context.ApplicationContext;
Import org.springframework.context.support.FileSystermXmlApplicationContext;
Import com.gc.action.HelloWorld;
 
Public class TestHelloWorld{
 
     Public static void main(String [] args){
       //通过appliactioncontext获取spring配置文件
       ApplicationContext actx = newFileSystemXmlApplicationContext(“config.xml”);
 
       //通过bean id 获取bean(helloworld 类)
       HelloWorld helloworld =(HelloWorld)actx.getBean(“HelloWorld”);
       System.out.printin(helloworld.getMsg());
}
}</span>

       

       输出结果为xml中为msg注入的value值。如果想输出不同结果,只要改变spring 的xml文件即可,达到解耦合的作用。这就是Ioc简单的应用原理了。

       对IOC的学习还需要进一步的研究,多多交流。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐