Spring框架中常见的设计模式

一、Spring 容器核心

Spring 是一个开源框架,为简化企业级应用开发而生。Spring 可以是使简单的JavaBean 实现以前只有EJB 才能实现的功能。Spring 是一个 IOC 和 AOP 容器框架。

Spring 容器的主要核心是:

控制反转(IOC),传统的 java 开发模式中,当需要一个对象时,我们会自己使用 new 或者 getInstance 等直接或者间接调用构造方法创建一个对象。而在 spring 开发模式中,spring 容器使用了工厂模式为我们创建了所需要的对象,不需要我们自己创建了,直接调用spring 提供的对象就可以了,这是控制反转的思想。

依赖注入(DI),spring 使用 javaBean 对象的 set 方法或者带参数的构造方法为我们在创建所需对象时将其属性自动设置所需要的值的过程,就是依赖注入的思想。

面向切面编程(AOP),在面向对象编程(oop)思想中,我们将事物纵向抽成一个个的对象。而在面向切面编程中,我们将一个个的对象某些类似的方面横向抽成一个切面,对这个切面进行一些如权限控制、事物管理,记录日志等公用操作处理的过程就是面向切面编程的思想。AOP 底层是动态代理,如果是接口采用 JDK 动态代理,如果是类采用CGLIB 方式实现动态代理。

二、Spring框架中的设计模式

1.工厂模式

spring工厂模式可以通过BeanFactory或ApplicationContext创建bean对象

  两者区别:

  1. BeanFactory

基础类型的 IOC 容器,提供完成的 IOC 服务支持。如果没有特殊指定,默认采用延迟初始化策略。相对来说,容器启动初期速度较快,所需资源有限。

  1. ApplicationContext

ApplicationContext 是在 BeanFactory 的基础上构建,是相对比较高级的容器实现,除了 BeanFactory 的所有支持外,ApplicationContext 还提供了事件发布、国际化支持等功能。ApplicationContext 管理的对象,在容器启动后默认全部初始化并且绑定完成。

2.单例模式

单例模式——在 spring 的配置文件中设置 bean 默认为单例(singleton)模式。

当定义一个<bean> 在 Spring 里,我们还能给这个 bean 声明一个作用域。它可以通过 bean 定义中的scope 属性来定义。如,当 Spring 要在需要的时候每次生产一个新的 bean 实例,bean 的 scope 属性被指定为 prototype。另一方面,一个 bean 每次使用的时候必须返回同一个实例,这个 bean 的scope 属性必须设为 singleton。

Spring 支持的几种bean 的作用域:

singleton : bean 在每个 Spring ioc 容器中只有一个实例,单例。

prototype:一个 bean 的定义可以有多个实例,多例。

request:每次 http 请求都会创建一个 bean,该作用域仅在基于 web 的 Spring ApplicationContext 情形下有效。

session :在一个 HTTP Session 中, 一个 bean 定义对应一个实例。该作用域仅在基于 web 的

Spring ApplicationContext 情形下有效。

global-session:在一个全局的 HTTP Session 中,一个 bean 定义对应一个实例。该作用域仅在基于 web 的

Spring ApplicationContext 情形下有效。

 Spring实现单例的方式:


xml格式,默认不设置的话是singleton(单例):
<bean id="userService" class="top.snailclimb.UserService" scope="singleton"/>
注解:
@Scope(value = "singleton")

3.代理模式

Spring中使用到代理模式的就是spring核心之一的Spring AOP了。Spring AOP是代理模式实现,没有接口的话使用Cglib代理,有则使用JDK动态代理。

Spring AOP的几个重要概念:

       切面 :拥有重复代码的类 ;

    (横切)关注点:  重复的代码;

       切入点:确定哪些类的哪些方法切入关注点;

      切入点Pointcut: 定义一个范围,控制增加的功能作用的范围(范围:一个包下的所有类,一个类,一个方法等等)。

      通知Advice:切入的时间 , 定义一个时间点,控制增加的功能切入时间;

    连接点(JoinPoint):JoinPoint获取的目标对象信息。

4.模板方法设计模式

Spring中jdbcTemplate以Template结尾的对数据库操作的类,它们就使用到模板模式。一般情况下,我们都是使用继承的方式来实现模板模式,但是Spring并没有使用这种方式,而是使用Callback模式与模板方法配合,既达到了代码复用的效果,同时增加了灵活性。
 

5.观察者模式

spring的事件驱动模型使用的是 观察者模式

通过ApplicationEvent抽象类和ApplicationListener接口,可以实现ApplicationContext事件处理

监听器在处理Event时,通常会进行判断传入的Event是不是自己所想要处理的,使用instanceof关键字

  ApplicationEventMulticaster事件广播器实现了监听器的注册,一般不需要我们实现,只需要显示的调用applicationcontext.publisherEvent方法即可

6.适配器设计模式

7.装饰者设计模式

8.策略设计模式

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值