概述
1.工厂模式:BeanFactory
2.代理模式 AOP动态代理
3.单例模式:spring中bean都是单例模式,bean默认都是单例的
4.模板方法:postProcessorBeanFactory, onRefresh,initpropertyValue
5.观察者模式:listener,event,multicast
6.适配器模式:Adapter
7.装饰者模式:BeanWrapper
8.委托者模式:DispatcherServlet
9.策略模式:XmlBeanDefinitionReader, PropertiesBeanDefinitionReader(替换if-else分支)
10.建造者模式:buider
11.责任链模式:使用aop的时候会有一个责任链模式
12 包装器设计模式
13.原型模式:指定作用域为prototype
设计模式
工厂设计模式
Spring使用工厂模式通过BeanFactory和ApplicationContext创建bean对象。
BeanFactory用来创建对象的实例,贯穿于BeanFactory / ApplicationContext接口的核心理念。
Spring的BeanFactory类,就是使用了简单工厂模式。它主要提供getBean()方法,用来创建对象的实例;我们
见得比较多的ApplicationContext也是继承自BeanFactory。
代理设计模式
Spring AOP功能的实现,在AOP和remoting中被用得比较多。
AOP思想的底层实现技术,Spring中采用JDK Proxy和CgLib类库
比如AOP模块中的AopProxy,用到了JDK的动态代理和CGLIB字节码生成技术;
3.单例模式
Spring中的bean默认都是单例的。在Spring配置文件中定义的Bean默认为单例模式
Spring中的Bean默认为singleton单例。我们可以通过配置Bean的作用域scope参数来进行修改。SpringBean一共有5种内置的作用域,分别是singleton、prototype、request、session、globalSession。
模板方法模式
Spring中的jdbcTemplate、hibernateTemplate等以Template结尾的对数据库操作的类,它们就使用到了模板模式。
主要用来解决代码重复的问题。Spring提供了非常多的模板类来减少重复代码,基本都是以Template结尾,比如RestTemplate,JmsTemplate,JdbcTemplate。
观察者模式
Spring事件驱动模型就是观察者模式很经典的一个应用。
主要用于当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知,在Spring中一般以Listener结尾,比如ApplicationListener等等。
适配器模式
Spring AOP的增强或通知(Advice)使用到了适配器模式、Spring MVC中也是用到了适配器模式适配Controller。
在Spring,只要是以Adapter命名的类基本都是适配器模式的应用。比如MVC模块中的HandlerAdapter。
装饰器模式
在Spring中,只要见到以Wrapper命名的类基本都是使用装饰器模式。比如BeanWrapper,用来访问Bean的属性和方法。
委派模式
Srping提供了DispatcherServlet来对请求进行分发。
策略模式
Spring中Bean的实例化采用的就是策略模式。因为Bean的实例化包含原生对象的实例化,和代理对象的实例化,不同对象实例化的逻辑也不一样,所以实例化策略也不一样,比如SimpleInstantiationStrategy就是Spring中默认的实例化策略。
包装器设计模式
我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。