Spring解耦原理_简单工厂模式01

Spring解耦原理: 利用简单工厂模式降低耦合
1)什么是耦合:
耦合是程序之间的依赖程度。
2)什么是解耦:
降低程序之间的耦合关系,耦合程度只能降低,不能消除。
宗旨:编译时不依赖,运行时才依赖。
例如: Class.forName(“com.mysql.jdbc.Driver”);
"com.mysql.jdbc.Driver"在编译时对程序而言只是字符串,运行才依赖com.mysql.jdbc.Driver的程序代码。
一:工厂模式(简单工厂模式、工厂方法模式和抽象工厂模式)
简单工厂模式不符合开闭原则,(对扩展开放,对修改关闭)
什么是工厂模式?
工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。
解耦思路:
1)把全局类名放到配置文件中。(beans.xml)
2)把创建实例对象的过程转交工厂类实现。(基于Java反射原理/简单工厂模式)
1)beans.xml

<beans>
    <bean id="userServiceImpl" class="service.impl.UserServiceImpl"></bean>
</beans>

2)建立工厂类:

public class BeanFactory {
    private static Map<String ,Object> map = new HashMap<String ,Object>();
    static{
        InputStream inputStream = BeanFactory.class.getResourceAsStream("/beans.xml");
        //解析xml获取xml中所有的信息
        SAXReader reader = new SAXReader();
        try {
            Document doc = reader.read(inputStream);
            Element rootElement = doc.getRootElement();
            List<Element> elements = rootElement.elements();
            for (Element element : elements){
                String id = element.attributeValue("id");
                String className = element.attributeValue("class");
                //通过className全限类名创建对象--获取字节码
                Class clazz = Class.forName(className);
                //通过反射创建对象
                Object obj = clazz.newInstance();
                //存储在Map集合中
                //key: id
                //value:obj
                map.put(id ,obj);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //需要实现的功能,传入一个名字,获取一个Bean对象
    public static Object getBean(String name){
        return map.get(name);
    }
}

创建实例对象:

UserServiceImpl userService = (UserServiceImpl)BeanFactory.getBean("userServiceImpl");

优点:把实例化的过程转交给工厂类来实现,降低了程序之间的耦合关系,如果删除了userServiceImpl对象的类,BeanFactory.getBean(“userServiceImpl”); 不会出现错误,而是出现异常。
java.lang.ClassNotFoundException: service.impl.UserServiceImpl
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)

没有通过工厂类创建对象的情况下一般是通过new关键字实例化对象,如果在项目里删除UserServiceImpl类,会造成程序出现错误,无法执行。
UserServiceImpl userService = new UserServiceImpl();

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值