Spring中的设计模式分析
缘起:
在面试过程中总是被面试官问到spring中应用到的设计模式,尽管以前有了一些了解,但是生活很骨感,答的不尽完美,索性弄清楚这个,好好搞搞,让自己也成为理论大神(面试大神)
首先谈一谈控制反转(ioc)和依赖注入(di)
控制反转是Spring中运用的一个非常重要的思想,它不是什么技术,而是一种重要的解耦思想。它主要是依赖于“ioc容器” ,管理具有依赖关系的各个对象之间的关系(解耦),我们只管使用对象即可,从而降低代码的耦合度。ioc是一种原则,而不是一个模式。
Spring IOC就像一个工厂一样,当我们需要一个对象时,只需要配置好这个对象的bean配置文件/或者注解就好了,需要时我们直接取用,完全不必考虑对象是怎么创建出来的;ioc容器负责创建这些对象,配置这些对象,将这些对象连接在一起,并负责这些对象的整个生命周期,直到对象被销毁为止;
控制反转的理解:打个比方:对象a依赖于对象b,当对象a/需要使用对象b时,我们需要去手动创建一个对象b。但是使用了ioc容器,配置好a和b后,对象a和b之间没有直接的联系,当对象a需要使用对象b时,直接将b注入到对象a中,由a主动控制b变成了被b控制,简单来说就是控制反转;
依赖注入(DI):是实现控制反转的一种设计模式。依赖注入就是将一个实例变量传入到一个需要使用他的对象中去;
依赖注入的三种方式:构造方法注入,setter注入,注解注入;
spring使用了哪几种设计模式:
1.工厂模式:spring中在创建beanFactory时使用了工厂模式,其中ioc容器就是一种工厂模式;
2.单例模式:Spring中的bean默认都是单例的;
3.代理模式:SpringAOP的实现就是一种代理模式;
4.适配器模式:SpringAOP的增强中使用了适配器模式,SpringMVC中也使用了适配器模式;Controller
5.观察者模式:Spring事件驱动模型就是一个观察者模式;
6.模板方法模式 : Spring 中 jdbcTemplate
、hibernateTemplate
等以 Template 结尾的对数据库操作的类,它们就使用到了模板模式;