StaticFactory Method 简单工厂 / 静态工厂:
一个工厂类根据传入的参数按照写好的业务逻辑动态进行对象(该对象继承了一个抽象的父类或接口)的创建。这样可以减少很多对象的创建,提高代码质量,同时也方便拓展和维护。
Factory Method 工厂模式:
- BeanFactory:是一种懒汉模式,即使用到某个Bean时才会进行注入和ApplicationContext相比会占用更少的内存,程序启动速度更快
- ApplicationContext:是一种饿汉模式,容器启动时就创建所有的Bean和BeanFactory相比 ,BeanFactory仅提供了最基本的依赖注入支持 . ApplicationContext扩展了BeanFactory, 除了BeanFactory的功能外还包含其余更多的功能,通常使用ApplicationContext创建BeanApplicationContext的实现类。
Singleton 单例:
一个类仅有一个实例,仅创建一次对象。Spring中的Bean的作用域默认就是单例Singleton的。例如request: 每一次HTTP请求都会创建一个新的Bean实例,该Bean实例仅在当前HTTP request中有效
- 饿汉模式:通过JVM隔离其他线程,初始化时就创建对象,阻止其他线程创建,例如ApplicationContext
- 懒汉模式:调用构造方法时才会创建对象(线程安全问题:在多线程的情况下,创建容易发生冲突:第一个线程识别instance为null还未创建时,第二个线程也识别instance为null,此时两个线程创造了两个不同hashCode的对象,所以需要对其加锁来防止这种情况);例如BeanFactory
- 枚举法
Proxy代理模式:
面向切面编程AOP: Aspect-Oriented Programming :面向切面编程能够将和业务无关,但是是业务模块中所共同调用的逻辑或者业务功能封装起来, 比如事务管理,日志管理,权限控制等 有利于减少重复代码,降低模块之间的耦合度,并有利于面向未来的可拓展性和可维护性 使用AOP可以将一些通用功能抽象出来,在需要使用的地方直接使用,这样可以大大简化代码量 需要增加新功能也会更加简单方便,这样可以提高系统的扩展性。
Spring AOP基于动态代理实现:
- 代理对象实现了接口:Spring AOP会使用Java动态代理JDK Proxy创建代理对象 完成对象的代理操作。
- 代理对象没有实现接口: Spring AOP会使用Cglib Proxy生成一个被代理对象的子类作为代理类完成对象的代理操作
Adapter适配器:
是结构型模式,也是各种结构型模式的起源 将一个接口转换为调用方需要的接口 适配器使得接口不兼容的类之间可以一起工作.适配器又被称为包装器Wrapper
Spring AOP中的适配器模式:
- Spring AOP中的增强和通知Advice使用了适配器模式,接口是AdvisorAdapter
- 常用的Advice类型包括: BeforeAdvice: 前置通知. 目标方法调用前增强 AfterAdvice: 后置通知. 目标方法调用后增强 AfterReturningAdvice: 目标方法执行结束之后 ,return之前
- 每个通知Advice都有对应的拦截器: BeforeAdvice - MethodBeforeAdviceInterceptor AfterAdvice - MethodAfterAdviceInterceptor AfterReturningAdvice - MethodAfterReturningAdviceInterceptor
- Spring中预定义的通知要通过对应的适配器,适配成为MethodInterceptor接口类型的对象
Spring MVC中的适配器模式:
- Spring MVC中 ,DispatchServlet根据请求信息调用HanlderMapping, 解析请求对应的Handler, 解析到对应的Handler后,开始由HandlerAdapter适配器进行处理
- HandlerAdapter作为期望接口,具体的适配器实现类对具体目标类进行适配 .controller作为需要适配的类
- 通过使用适配器AdapterHandler可以对Spring MVC中众多类型的Controller通过不同的方法对请求进行处理
Decorator包装器:
动态地给对象添加一些额外的属性或者行为 和继承相比,装饰器模式更加灵活。
当需要修改原有的功能,但是不想直接修改原有的代码,就可以设计一个装饰器Decorator类在原有的代码的外面,这样可以在不修改原有的类的基础上扩展新的功能
- Spring中配置DataSource时 ,DataSource可以是不同的数据库和数据源.为了在少修改原有类的代码下动态切换不同的数据源,这时就用到了装饰器模式
Observer观察者:
一种对象行为模式 表示的是一种对象和对象之间具有依赖关系。当一个对象发生改变,依赖于这个对象的对象也会发生改变
Spring事件驱动模型就是基于观察者模式实现的 。Spring事件驱动模型可以在很多应用场景中解耦代码 比如每次添加商品时都需要更新商品索引,这时就可以使用观察者模式
Spring事件驱动模型的三种角色:
- 事件Event角色
- 事件监听者Listener角色
- 事件发布者Publisher角色
Spring事件流程:
- 定义一个事件: 实现一个继承自ApplicationEvent的事件类,并写出相应的构造函数
- 定义一个事件监听者: 实现ApplicationListener接口 重写onApplicationEvent() 方法
- 使用事件发布者发布消息: 使用ApplicationEventPublisher的publishEvent() 方法 重写publishEvent() 方法发布消息
Strategy策略:
属于行为型模式,一个类的行为或其算法可以在运行时更改。
创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法
- Spring框架的资源访问Resource接口。该接口提供了更强的资源访问能力,Spring 框架本身大量使用了 Resource 接口来访问底层资源。