spring的ioc原理简介

来源:互联网 发布:工业相机测量软件 编辑:程序博客网 时间:2024/06/06 03:19

之前也简单使用过spring,也知道spring的两大核心aop和ioc,但对其实现原理却并不清楚,今天在一个讲解spring的视频上学到了ioc的原理,讲的很好,思路很清晰,在此记录一下。

在JavaEE中,经常有这样的情况,在一个Servlet中调用一个Service类中的方法:

public class UserService(){    pubilc void add(){      //do something    }}public class Servlet(){    UserService userService=new UserService();    userService.add();}如果改动UserService类(比如类改名),那么需要的Servlet中修改所有对应的类名。

大家都知道,软件设计的理想情况是低耦合,最好是一个类做了改动之后,其他与之相关联的类不需要修改或者只要做少量修改就能正常工作,以上这种写法显然是不符合这种原则的。

spring使用以下几种技术/模式组合实现了ioc:
1、xml文件,
2、工厂模式,
3、dom4j(用来解析xml),
4、反射机制

对照上面的代码,看看spring的ioc如何实现Servlet调用Service中的方法

`1、在xml文件中配置bean<bean id="userService" class="com.test.UserService">`2、写一个工厂类public class Factory{    public static UserService getUserService(){        3、使用dom4j解析上一步中userService的全类名        //String className="com.test.UserService";        4、使用反射机制创建UserService对象并返回        return Class.forName(className).newInstance();    }}//UserService还是这样写public class UserService(){    public void add(){        //do something    }}//Servlet中使用工厂方法获取Service对象,然后调用方法即可public class Servlet{    Factory.getUserService().add(); }

可以看到,spring的ioc在使用了工厂模式,xml,dom4j及反射机制后,使得UserService和Servlet之间的耦合度大大降低了,如果此时修改UserService的类名,只需要修改xml文件中的class属性值,而无需对Servlet做任何修改,就可以正常运行了。

原创粉丝点击