Spring 框架中用到的设计模式

概述

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中默认的实例化策略。

包装器设计模式
我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。

  • 19
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Spring框架用到了很多设计模式,包括但不限于: 1. 单例模式Spring的Bean默认都是单例的,即在整个应用只有一个实例。 2. 工厂模式Spring的BeanFactory和ApplicationContext都是工厂模式的实现,用于创建和管理Bean。 3. 代理模式Spring的AOP就是基于代理模式实现的,通过代理对象来实现横切关注点的功能。 4. 模板方法模式Spring的JdbcTemplate和HibernateTemplate都是模板方法模式的实现,提供了一些通用的模板方法,简化了数据库操作和ORM操作的流程。 5. 观察者模式Spring的事件机制就是基于观察者模式实现的,通过事件发布和监听来实现解耦。 6. 适配器模式Spring的适配器模式主要用于适配不同的接口,比如Spring MVC的HandlerAdapter就是适配不同的Controller接口。 7. 迭代器模式Spring的集合框架都实现了迭代器模式,提供了一些通用的迭代器接口,方便集合的遍历。 8. 策略模式Spring的BeanPostProcessor和BeanFactoryPostProcessor就是基于策略模式实现的,通过不同的策略来处理Bean的初始化和后置处理。 9. 装饰器模式Spring的装饰器模式主要用于增强Bean的功能,比如通过AOP来实现事务管理和安全控制等功能。 总之,Spring框架用到的设计模式非常多,这些设计模式都是为了实现框架的功能和解决框架的问题而存在的。 ### 回答2: Spring框架是一个基于Java语言的企业级应用开发框架,它的设计理念是基于面向对象设计与编程的思想,而在其内部实现,也采用了不少常见的设计模式。 1. 工厂模式(Factory pattern) Spring框架,BeanFactory就是利用工厂模式来创建和管理Bean对象的,它提供了各种创建和访问Bean对象的方法,其包括getSingleton()方法和getBean()方法。BeanFactory是Spring框架的核心接口,通过该接口可以动态获得业务对象和控制对象,并且该对象的生命周期也由BeanFactory负责管理。 2. 单例模式(Singleton pattern) Spring框架,很多对象的创建采用了单例模式,这样可以避免重复创建对象,提高系统的性能和效率。例如,ApplicationContext和WebApplicationContext就是单例对象,而BeanFactory默认也是单例对象。在Spring框架,单例模式被广泛应用于各种Bean对象的创建过程。 3. 代理模式(Proxy pattern) Spring框架,采用了代理模式来实现AOP(面向切面编程)。例如,通过JDK动态代理实现了基于接口的AOP,使用CGLIB实现了基于继承的AOP,使用AspectJ实现了多种切面表达式。这些代理对象可以在目标对象执行之前或之后,实现各种横切关注点的切入操作。 4. 观察者模式(Observer pattern) Spring框架,多个Bean之间的相互依赖采用了观察者模式。例如,当一个Bean发生改变时,Spring框架就可以自动通知其它Bean,这些Bean可以根据相应的事件来更新状态或执行相关操作。 5. 模板方法模式(Template Method pattern) Spring框架,JdbcTemplate就是运用模板方法模式来处理数据库访问的。JdbcTemplate定义了一个模板方法,通过这个模板方法调用数据库访问操作,具体的数据库访问方法由具体子类来实现,这样可以使得具体的数据库访问操作和通用的模板方法相互独立,方便扩展和修改。 总之,Spring框架用到了不少常用的设计模式,这些设计模式的应用也使得Spring框架的整体设计更加稳定、灵活和易于扩展。 ### 回答3: Spring框架是一个开放源代码的Java应用框架,目的是为了简化企业级应用程序的开发。Spring框架用到了很多设计模式,主要包括以下几种: 1. 依赖注入模式(DI):Spring框架通过DI模式来管理对象之间的依赖关系,依赖注入模式是一种实现编写松耦合代码的方法,减少大量无用代码,提高代码重用性和管理性。 2. 控制反转模式(IOC):Spring框架使用IOC模式来管理对象的生命周期和对象之间的依赖关系。IOC控制反转为我们解决了依赖性问题,根据依赖性的原则,应具有高度的抽象性和松耦合性。 3. 单例模式Spring框架的Bean默认为单例(Singleton),具有只创建一次,重复使用的优点,而单例模式就是实现单例的设计模式。 4. 模板方法模式Spring提供了JdbcTemplate等模板类,这是一种典型的模板方法模式,该模式将所有通用操作抽象出来,由子类实现具体的部分,使得子类具备了扩展的能力。 5. 工厂模式Spring框架使用工厂模式来创建Bean,可以通过XML或注解方式进行配置和实现,如BeanFactory、ApplicationContext、BeanDefinition等都是工厂模式的应用。 6. 代理模式Spring框架使用AOP(面向切面编程)来实现代理模式,其主要实现方式是动态代理。通过动态代理,可以在不修改现有代码的情况下为类添加额外的功能,使得代码结构更加清晰和可维护。 总之,Spring框架设计、开发过程充分运用了众多的设计模式,使得它的代码质量更好,更灵活,更易于维护和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思静语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值