spring用到的设计模式

本文详细介绍了Spring框架中常用的设计模式,包括单例模式、原型模式、工厂模式、模板方法、策略模式、观察者模式、适配器模式、装饰者模式、责任链模式和代理模式,阐述了它们在Spring中的应用和实现方式,帮助读者理解Spring框架的设计思想和工作原理。
摘要由CSDN通过智能技术生成

1、单例模式

在Spring中,默认情况下,Spring容器中的所有Bean都是单例(Singleton)的,也就是说,Spring容器中每个Bean的实例只有一个。这是因为Spring默认使用单例模式来创建Bean,确保每个Bean在整个应用中只有一个实例,从而提高应用性能和资源利用率。

在Spring中,单例 Bean 是 Spring ApplicationContext 中的默认作用域,意味着每个 Spring 容器中,只会创建一个 Bean 实例。单例 Bean 的生存期是长期的,也就是在 Spring 的 ApplicationContext 容器规定的范围内,单例 Bean 只生成一次,所以也被称为容器 Bean。

在Spring配置文件中,既可以使用XML配置,在Bean配置中设置scope=“singleton”,也可以使用Java注解,在Bean类上添加@Scope(“singleton”),来将一个Bean设置为单例。

2、原型模式

在Spring中,原型模式是一种创建型设计模式,通常用于创建可重用的对象,以减少对象创建的开销。原型模式与单例模式相反,它不会创建一个对象池或全局状态对象,而是会每次从原型复制一个新的对象,以实现对象的复用。

在Spring中,可以通过配置XML文件或者使用注解来将Bean设置为Prototype作用域,例如在XML中:

<bean id="prototypeBean" class="com.example.PrototypeBean" scope="prototype">

在Java中使用注解:

@Component
@Scope("prototype")
public class PrototypeBean {
   
    // ...
}

无论是在XML中还是使用注解,都需要将Bean的scope属性设置为prototype。

在使用Spring的原型模式时需要注意,由于每次请求都会创建一个新的实例,因此需要自行管理原型实例的资源和状态,以避免可能存在的内存泄漏或数据共享问题。

总之,Spring中的原型模式通过指定Bean的作用域为prototype,可以实现每次请求时创建一个新的实例,避免了对象池和全局状态对象的使用,是一种创建对象的高效方式,常见的应用场景包括在高并发环境下创建对象等。

3、工厂模式

在Spring中,工厂模式是一种创建型设计模式,它提供了一种创建对象的统一接口,通过实现该接口并在工厂类中实现对象的创建、初始化等过程,来实现对象的创建和管理。

在Spring中,工厂模式通常用于创建一些具有相同接口或抽象类的不同类的实例,以达到解耦和复用的目的。Spring中的工厂模式主要有两种形式:BeanFactory和ApplicationContext。

1、BeanFactory
BeanFactory是Spring中最基本的工厂模式实现,它是一个工厂对象的管理容器,通过配置文件或者注解来创建和管理Bean对象,提供了创建、查找、获取以及销毁Bean对象等功能。在使用时,需要直接调用ApplicationContext对象的getBean方法获取Bean实例。

2、ApplicationContext
ApplicationContext是一个伴随着Spring的整个生命周期的对象,它是BeanFactory的子接口,提供了更加强大的功能,如国际化、事件传递、资源管理、配置文件加载等。

4、模板方法

在Spring中,模板方法是一种行为型设计模式,它定义了一个算法的骨架,在不改变算法结构的前提下允许子类重写算法的特定步骤,以适应不同的应用场景。

在Spring中,模板方法模式常常用于实现一些通用的操作,例如数据库操作、事务管理等。模板方法模式通常包含以下几个部分:

1、抽象模板类(Abstract Template):定义了算法骨架以及算法的每个步骤,其中某些方法由子类实现,以允许不同实现。

2、具体模板类(Concrete Template):继承抽象模板类,实现抽象方法,以具体实现算法中的每个步骤。

3、客户端(Client):使用模板方法类中的算法。

在Spring中,模板方法模式可以用于开发数据访问层(DAO)的实现。例如,使用Spring JDBC技术实现数据访问层时,我们可以将常见的操作(如查询、更新、删除等)抽象为模板方法,具体实现交给子类或其他实现类。这样做可以避免重复的代码,并且提供了代码重用和维护的方便性。

Spring中的JdbcTemplate和HibernateTemplate等都是模板方法模式的应用实例。例如,JdbcTemplate的update()方法就是一个模板方法,其中更新操作的细节由传入的PreparedStatementCreator和PreparedStatementSetter对象完成。

总之,Spring中的模板方法模式在很多场景下都得到了广泛的应用,如数据访问、事务管理等。通过封装公共的算法步骤,在具体的实现中允许添加和改变某些步骤,以适应不同的应用场景,提高了代码重用和可维护性,是一种非常有用的设计模式。

5、策略模式:

在Spring中,策略模式是一种行为型设计模式,用于定义一系列算法,并将每个算法封装到一个独立的类中,以使得它们可以互换使用。

在Spring中,经常使用策略模式来实现某些决策过程,如根据不同的条件选择不同的数据源。通常情况下,策略模式有如下三个角色:

1、抽象策略类(Abstract Strategy):定义策略模式的抽象接口或抽象类,是所有具体策略类的父类。
2、具体策略类(Concrete Strategy):实现抽象策略类定义的算法,并实现接口或继承抽象类。

3、环境(context)类:使用具体的策略类来实现具体的操作,维护一个对抽象策略类的引用。

在Spring中,策略模式通常是通过依赖注入来实现的。例如,使用Spring实现简单的策略模式可以如下:

1、创建一个Drivable接口,表示可行驶的类型。

public interface Drivable {
   
    void drive();
}

2、创建两个实现了Drivable接口的类:

@Component("car")
public class Car implements Drivable {
   
    @Override
    public void drive() {
   
        System.out.println("Driving Car...");
    }
}

@Component("bus")
public class Bus implements Drivable {
   
    @Override
    public void drive() {
   
        System.out.println("Driving Bus...");
    }
}

3、创建一个类,它包含一个Drivable类型的依赖,并在内部使用该依赖策略:

@Component
public class DriveService {
   
    @Autowired
    @Qualifier("car")
    private Drivable drivable;
    
    public void driveVehicle() {
   
        drivable.drive(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一叶飘零晋

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

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

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

打赏作者

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

抵扣说明:

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

余额充值