-
Spring的IOC底层原理实现
-
传统方式的开发: UserService us = new UserService(); 在Web层直接创建一个业务层的对象 缺陷:没有面向接口编程
-
改进:通过面向接口编程 UserService us = new UserServiceImpl(); 在Web层通过业务层的接口创建了实现类 缺点:Web层与业务层产生了耦合,不符合OCP原则(修改关闭,扩展开放)
-
改进:使用工厂模式 由原来直接用接口创建实现类 改为 通过用工厂来创建实现类 工厂类代码: class FactoryBean{ public UserService getUs() { return new UserServiceImpl(); } ...... } 耦合关系变为:接口和工厂类耦合 获得对象实例:UserService us = FactoryBean.getUs(); 如果需要切换底层实现,虽然不用改获得实例的代码但是需要改工厂类的代码。
-
!!!那有没有一种方法可以不需要修改任何的源代码呢? 方案:使用工厂+反射+配置文件(xml)(可以完成程序的解耦合) <bean id="us" class:"com.imooc.UserServiceImpl"/> class FactoryBean{ public static Object getBean(String id) { ... 反射 } } 原理:在工厂类中通过解析xml文件的<bean>标签,根据传入的id去创建对应类型的对象
例题