- 工厂设计模式:Spring使用工厂模式可以通过BeanFactory或ApplicationContext创建bean对象。
BeanFactory :延迟注入(使用到某个 bean 的时候才会注入),相比于BeanFactory来说会占用更少的内存,程序启动速度更快。
ApplicationContext :容器启动的时候,不管你用没用到,一次性创建所有 bean 。BeanFactory 仅提供了最基本的依赖注入支持,ApplicationContext 扩展了 BeanFactory ,除了有BeanFactory的功能还有额外更多功能,所以一般开发人员使用ApplicationContext会更多
2. 单例设计模式:Spring中bean的默认作用域就是singleton。spring的一级缓存就是使用的容器式单例
3. 代理设计模式:Spring AOP就是基于动态代理的。如果要代理的对象,实现了某个接口,那么Spring AOP会使用JDK Proxy,去创建代理对象,而对于没有实现接口的对象,就无法使用JDK Proxy去进行代理了,这时候Spring AOP会使用Cglib,这时候Spring AOP会使用Cglib生成一个被代理对象的子类来作为代理。
4. 模板方法设计模式:Spring中jdbcTemplate、hibernateTemplate等以Template结尾的对数据库操作的类,它们就使用到模板模式。一般情况下,我们都是使用继承的方式来实现模板模式,但是Spring并没有使用这种方式,而是使用Callback模式与模板方法配合,既达到了代码复用的效果,同时增加了灵活性
5. 观察者设计模式:Spring事件驱动模型就是观察者模式很经典的应用。
spring的事件流程:
1)定义一个事件: 实现一个继承自 ApplicationEvent,并且写相应的构造函数
2)定义一个事件监听者:实现 ApplicationListener 接口,重写 onApplicationEvent() 方法
3)使用事件发布者发布消息: 可以通过 ApplicationEventPublisher 的 publishEvent() 方法发布消息
6. 适配器设计模式:适配器模式使得接口不兼容的那些类可以一起工作,其别名为包装器
在Spring MVC中,DispatcherServlet根据请求信息调用HandlerMapping,解析请求对应的Handler,解析到对应的Handler(也就是我们常说的Controller控制器)后,开始由HandlerAdapter适配器处理
7. 装饰者设计模式:装饰者设计模式可以动态地给对象增加些额外的属性或行为。相比于使用继承,装饰者模式更加灵活
Spring 中配置DataSource的时候,DataSource可能是不同的数据库和数据源。我们能否根据客户的需求在少修改原有类的代码下切换不同的数据源?这个时候据需要用到装饰者模式。
8. 策略设计模式:Spring 框架的资源访问接口就是基于策略设计模式实现的
