Spring的IOC容器简单介绍(工厂模式解耦)

Spring中有一个重要的组件,IOC容器。IOC就是(Inverse of control)控制反转。我们在程序中经常去调用别的对象,这个时候就会对调用的对象产生依赖,我们程序的耦合性就会变高。
程序的耦合大致分为类与类之间的依赖方法与方法之间的依赖
这里拿类与类之间的依赖为例,我们在A类中需要B类的方法时,此时往往去new一个B类的对象。比如
UserDao userDao = new UserDao();
在以前三层架构编程时,往往控制层调用业务层,业务层调用数据访问层时,是直接new对象,耦合性大大提升,万一以后数据访问层有新的版本,我们还要去业务层中修改源代码,就特别麻烦,还有可能出错。
为了避免这种情况,可以使用工厂模式编程,即写一个工厂,以后我们如果要对象就直接管工厂要就可以,剩下的事情不归我们管了。
代码:

public class BeanFactory {
    private static Properties properties = new Properties();
    private static HashMap<String,Object> beanMap = new HashMap();

    //加载配置文件
    static{
        InputStream inputStream = BeanFactory.class.getClassLoader().getResourceAsStream("beanFactory.properties");
        try {
            properties.load(inputStream);
            Enumeration<Object> keys = properties.keys();
            while (keys.hasMoreElements()){
                String key = (String) keys.nextElement();
                String property = properties.getProperty(key);
                Object value = Class.forName(property).newInstance();
                beanMap.put(key,value);
            }
        } catch (IOException e) {
            throw new ExceptionInInitializerError();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        }
    }

    public static<T> T getBean(String className){
        T t;

        t= (T) beanMap.get(className);

        return t;
    }
}

这个原理其实比较简单,就是先读取配置文件,然后传参数,根据参数的名字,反射出这个对象,为了不写死代码,所以才使用加载配置文件的方式。
工厂中有个map集合,是为了让工厂符合单例设计模式,即每个对象只生产一次,生产出对象后就存入到map集合中。
为什么要使用单例设计模式呢?
具体是要看情况,在三层结构编程里面,我们生产出来的bean对象(Service和Dao对象)没必要用到多例,多例反而还会影响效率,而且还没有共有变量,所以我们使用了单例模式还不用考虑线程安全问题,于是采用单例模式。
回到主题,IOC的目的就是为了解耦,控制反转的意思说白了就是把创建对象的权限移交出去。至于移交给谁,这里我们介绍的是Spring的IOC,那肯定是移交给Spring框架。上面的例子是移交给我们自己写的工厂对象。
以上是我个人理解,如果有需要更正的地方,希望各位帮帮忙指点出来。

发布了12 篇原创文章 · 获赞 10 · 访问量 1829

猜你喜欢

转载自blog.csdn.net/Jokeronee/article/details/104124584
今日推荐