【有例子代码】Spring框架的设计模式应用(上集)

news/2025/1/8 6:04:18/

设计模式在Spring框架中扮演着至关重要的角色。它们不仅帮助开发者解决常见的设计问题,还使得系统更加灵活和易于维护。在实际开发中,合理地应用这些设计模式可以显著提高代码质量和系统的可扩展性。例如,使用单例模式可以避免重复创建对象带来的性能开销;利用工厂模式可以动态地根据需要创建对象实例;而通过代理模式可以实现对目标对象的透明增强或监控。此外,观察者模式使得组件间的通信变得更加灵活,模板方法模式则简化了某些固定流程中的步骤。策略模式则可以根据不同的需求选择最合适的实现方式。

1. 单例模式 (Singleton Pattern)

描述:

  • 单例模式确保一个类只有一个实例,并提供一个全局访问点。

Spring 中的应用:

  • ApplicationContext: Spring 的 ApplicationContext 是一个典型的单例模式实现。整个应用程序共享同一个 ApplicationContext 实例。

  • Bean Scopes: 默认情况下,Spring 管理的 Bean 是单例的(singleton scope)。

示例:

@Configuration
public class AppConfig {@Beanpublic MyService myService() {return new MyServiceImpl();}
}

在这个例子中,MyService 的默认作用域是单例的。

2. 工厂模式 (Factory Pattern)

描述:

  • 工厂模式提供了一种创建对象的方式,而无需指定具体的类。

Spring 中的应用:

  • Bean Factory: BeanFactory 接口负责管理 Bean 的创建和生命周期。

示例:

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;publicclass FactoryPatternExample {public static void main(String[] args) {BeanFactory factory = new XmlBeanFactory(new ClassPathResource("beans.xml"));MyBean bean = (MyBean) factory.getBean("myBean");bean.display();}
}class MyBean {public void display() {System.out.println("Hello from MyBean!");}
}

注意:XmlBeanFactory已过时,推荐使用AnnotationConfigApplicationContext或ClassPathXmlApplicationContext。

3. 代理模式 (Proxy Pattern)

描述:

  • 代理模式为另一个对象提供一种代理以控制对这个对象的访问。

Spring 中的应用:

  • AOP (Aspect-Oriented Programming): 使用代理模式来拦截方法调用,实现横切关注点(如日志记录、事务管理等)。

  • JDK Dynamic Proxy: 用于实现接口的代理。

  • CGLIB Proxy: 用于实现类的代理。

示例:

@Aspect
@Component
public class LoggingAspect {@Before("execution(* com.example.service.*.*(..))")public void logMethodCall(JoinPoint joinPoint) {System.out.println("Method called: " + joinPoint.getSignature().getName());}
}

暂时先写这三个设计模式先,就像吃自助餐一样,先来个开胃菜。后面还有Spring框架里的9种设计模式应用,后面有空将会逐步更新!最近工作繁忙,请先关注我的绿色公举号,后续更新会第一时间通知你。

下集预告

下一篇文章将写上Spring框架下面三种设计模式的应用:

4. 观察者模式 (Observer Pattern)

5. 策略模式 (Strategy Pattern)

6. 模板方法模式 (Template Method Pattern)

/// ***你们的关注是我一直写作的动力
System.out.println("请添加我的绿色公主号:");
System.out.println("Java知识日历");

http://www.ppmy.cn/news/1561083.html

相关文章

基于word2vec的文本大数据分析

基于word2vec的文本大数据分析 效果: 一、简介 Word2Vec是一种词向量表示方法,是在自然语言处理领域(NLP)的神经网络模型,是一种无监督学习,包含两种模型架构:CBOW模型与Skip-Gram模型。 常用于:相似度计算、词类聚类、文本分类、句子和文档表示、搜索引擎优化、情…

事务隔离机制(超详细)

学习目标 那什么是事务?事务的四大特性一、原子性二、一致性三、隔离性四、持久性 事务的生命周期一、开始事务二、执行事务操作三、提交事务四、回滚事务五、事务结束 事务的并发控制一、并发控制的基本概念二、并发控制的目标三、并发控制的方法四、并发控制中的其…

大型 UniApp 应用的架构设计

一、引言 在当今数字化时代,移动应用的需求呈现爆发式增长,跨平台开发成为众多企业和开发者的首选策略。UniApp 作为一款极具影响力的跨平台开发框架,凭借 “一次开发,多端运行” 的特性,大幅提升了开发效率&#xff0…

王佩丰24节Excel学习笔记——第二十四讲:宏表函数

【以 Excel2010 系列学习,用 Office LTSC 专业增强版 2021 实践】 【本章技巧】 宏表函数不能直接使用。get.cell(参数一,参数二),参数一要参考类型表。 获得单元格的公式有很多种方法, 如:宏写法:get.cel…

Day 22:数据库与 Spring Data JPA

理论知识 1. 什么是 JPA? Java Persistence API (JPA) 是 Java EE 的规范,用于对象关系映射(ORM)。JPA 将数据库中的表映射为 Java 对象,简化了数据库操作。 优点: 提高开发效率,减少手动 SQ…

3.Web安全——div,css基础

一、什么是CSS? 在网页开发中,HTML(超文本标记语言)主要负责构建网页的结构,例如定义段落、标题、列表等元素。然而,HTML 本身在样式呈现方面的功能比较有限。CSS 的出现就是为了弥补这一不足,它…

网站常用功能模块-鉴权

一:JWT是什么? 常用鉴权方式有很多种,今天主要介绍基于token的鉴权方式JWT(Json JSON Web Token)。因为这种方式实现起来方便快捷。整体实现逻辑如下 第一次登陆时,前端携带账号和密码请求登录接口。服务…

修改secure-file-priv参数-mysql5.7.26限制不允许导入或导出的解决方法

文章目录 前言secure_file_priv参数说明修改secure_file_priv参数的步骤 前言 本人是在sql注入的文件上传拿web shel 时所用到的写入文件权限遇到文件上传不成功的问题,记住修改后,重启mysql才生效,最后可以查看验证一下。 secure_file_priv…