Spring中用到的设计模式

    科技2022-07-11  85

    1.简单工厂模式

    实现方式:beanfactory,spring中的beanfactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。 实质: 由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。 设计意义: 松耦合。可以将原来硬编码的依赖,通过spring这个beanFactory这个工厂来注入依赖,也就是说原来只有依赖方和被依赖方,现在我们引入了第三方-spring这个beanrfactory,由它来解决bean之间的依赖问题,达到了松耦合的效果。

    bean的额外处理。通过spring接口的暴露,在实例化bean的阶段我们可以进行一些额外的处理,这些额外的处理只需要让bean实现对应的接口即可,那么spring就会在bean的生命周期调用我们实现的接口来处理bean(非常重要)

    2,工厂方法:

    实现方式: factoryBean接口 实现原理: 实现了FactoryBean接口的bean是一类叫做factory的bean。其特点是,spring会在使用getBean()调用获得该bean时,会自动调用该bean的getObject()方法,所以返回的不是factory这个bean,而是这个bean,而是这个bean.getObject()方法的返回值。 例子: 典型的例子有spring与mybatis的结合

    因为实现了FactoryBean接口,所以返回的不是 SqlSessionFactoryBean 的实例,而是它的 SqlSessionFactoryBean.getObject() 的返回值。

    3单例模式

    spring依赖注入bean实例默认是单例的 spring的依赖注入(包括lazy-init方式)都是发生早abstractBeanFactory的getBean里。getBean的doGetBean方法调用getSingleton进行bean的创建里。

    4.适配器模式

    实现方式: springMVC中的适配器HandlerAdatper. 实现原理: HandlerAdapter根据Handler规则执行不同的Handler 实现过程: dispatcherServlet根据HandlerMapping返回的handler,向HandlerAdatper发起请求,处理Handler.

    HandlerAdapter根据规则找到对应的Handler并让其执行。执行完毕后Handler会向HandlerAdapter返回一个ModelAndView,最后由HandlerAdapter向DispatchServlet返回一个ModelAndView. 实现意义: HandlerAdatper使得Handler的扩展变得容易,只需增加一个新的Handler和一个对应的HandlerAdapter即可。

    5.代理模式

    实现方式: Aop底层就是动态代理模式的实现。 动态代理: 在内存中构建,不需要手动编写代理类 实现原理: 切面在应用运行的时刻被织入。一般情况下,在织入切面时,AOP容器会为目标对象动态创建一个代理对象,springAop就是以这种方式织入切面。

    织入:把切面应用到目标对象并创建新的代理对象的过程

    6.策略模式

    实现方式: spring框架的资源访问Resource接口。该接口提供了更强的资源访问能力,spring框架本身大量使用了Resource接口来访问底层资源。

    Resource接口介绍

    source接口是具体资源访问策略的抽象,也是所有资源访问类所实现的接口。 Resource接口主要提供了如下几个方法: getInputStream():定位并打开资源,返回资源 对应的输入流。每次调用都返回新的新的输入流,调用者必须负责关闭输入流。 exists(): 返回 Resource 所指向的资源是否存在。

    isOpen(): 返回资源文件是否打开,如果资源文件不能多次读取,每次读取结束应该显式关闭,以防止资源泄漏。

    getDescription(): 返回资源的描述信息,通常用于资源处理出错时输出该信息,通常是全限定文件名或实际 URL。 getFile: 返回资源对应的 File 对象。 getURL: 返回资源对应的 URL 对象。

    Resource接口本身没有提供访问任何底层资源的实现逻辑,针对不同的底层资源,spring将会提供不同的resource实现类,不同的实现类负责不同的资源访问逻辑。

    7.模板方法模式

    定义:父类定义了骨架(调用哪些方法及顺序),某些特定方法由子类实现。

    最大的好处:代码复用,减少重复代码。除了子类要实现的特定方法,其他方法及方法调用顺序都在父类中预先写好了。

    具体实现:

    JDBC的抽象和对Hibernate的集成,都采用了一种理念或者处理方式,那就是模板方法模式与相应的Callback接口相结合。

    采用模板方法模式是为了以一种统一而集中的方式来处理资源的获取和释放。

    Processed: 0.067, SQL: 8