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接口的类:文章来源:https://www.toymoban.com/news/detail-472862.html
@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类型的依赖,并在内部使用该依赖策略:文章来源地址https://www.toymoban.com/news/detail-472862.html
@Component
public class DriveService {
@Autowired
@Qualifier("car")
private Drivable drivable;
public void driveVehicle() {
drivable.drive(
到了这里,关于spring用到的设计模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!