Spring中的设计模式

模板方法模式

JdbcTemplate使用了模板方法模式,execute方法有个回调接口的参数,在execute方法中定义执行sql的整体步骤,整体步骤是获取连接、执行sql、释放连接,执行sql的具体逻辑由回调接口对象负责。query、update等方法只需传递具有相应实现逻辑的回调接口对象给execute方法即可。这样execute方法的复用性就很高。
正常情况下,模板方法模式是通过子类继承来实现不同的逻辑,而JdbcTemplate是通过回调机制。这是因为JdbcTemplate的方法太多了,不适合子类继承。

适配器模式

SpringAop中通知Advice使用了适配器模式。通知有BeforeAdvice、AfterReturningAdvice、ThrowsAdvice等。每种通知类型对应一种MethodInterceptor,例如MethodBeforeAdviceInterceptor、AfterReturningAdviceInterceptor、ThrowsAdviceInterceptor等。适配器有MethodBeforeAdviceAdapter、AfterReturningAdviceAdapter、ThrowsAdviceAdapter等。适配器将Advice适配成MethodInterceptor。例如MethodBeforeAdviceAdapter将BeforeAdvice适配成MethodBeforeAdviceInterceptor。

SpringMVC中HandlerAdapter使用了适配器模式。DispatcherServlet的doDispatch方法中从handlerMappings中找到request对应的handler,handler就是平常说的controller,从handlerAdapters中找到支持此handler的handlerAdapter,handlerAdapter发起处理request。Controller的种类很多,若不采用适配器模式,则需要用许多if判断controller的类型并强转为相应类型,以此来调用处理逻辑,这样当增加一种controller时将要增加if,违背了开闭原则,使用适配器模式则不会有这样的问题。当增加一种controller时只需增加一种适配器即可。

单例模式

spring bean的默认作用域是singleton,在DefaultSingletonBeanRegistry中的getSingleton方法。

简单工厂模式

简单工厂,又称静态工厂方法模式,不属于GOF23种设计模式。简单工厂就是根据参数动态决定创建哪种产品类。Spring的BeanFactory就是使用了简单工厂,通过唯一标识来获取bean对象。

工厂方法模式

定义一个生产对象的接口,由子类决定实例化哪一个类。Spring中FactoryBean就是典型的工厂方法模式,FactoryBean中定义了getObject的方法,由子类决定实例化具体的类。

观察者模式

spring的事件驱动模型使用了观察者模式。事件驱动模型由事件源、事件、监听器组成。
事件源:ApplicationPublisher,ApplicationContext实现了ApplicationPublisher,可以利用ApplicationContext发布事件。
事件:ApplicationEvent,通过继承ApplicationEvent来定义新的事件。
监听器:ApplicationListener,通过实现ApplicationListener来定义新的监听器。当自定义的监听器配置了bean时,该监听器会自动注册到ApplicationEventMulticaster。
ApplicationEventMulticaster:定义了注册监听器、移除监听器、响应事件的方法。

代理模式

AOP(aspect oriented programming),将与业务逻辑无关或可共用的代码分离出来,这样代码的复用性提高,且便于扩展。
Spring AOP基于动态代理,若被代理对象是接口,则用JDK proxy生成代理对象。若被代理对象是类,则用cglib生成子类作为代理对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值