当前位置: 首页 > news >正文

Spring中用到了哪些设计模式

口语化回答

好的,面试官,设计模式在 spring 中有很多的体现,比如工厂模式,spring 的 applicationtext 就是 spring 实现工厂模式的典型例子,以及 spring 容器中,默认每个 bean 都是单例的。aop 的面向切面则是体现的代理模式。还有就是 spring 的 event 的事件驱动,采取了观察者模式。其他的还有装饰器,策略模式等

题目解析

问的还是挺常见,经常和设计模式一起问。一般是先问设计模式然后延伸到 spring 或者其他框架都有什么。

面试得分点

下面这些模式,全部得分。

题目详细答案

工厂模式(Factory Pattern)

准确来说是简单工厂模式

Spring 使用工厂模式来创建对象实例。BeanFactory和ApplicationContext是 Spring 框架中实现工厂模式的核心接口。

应用场景:Spring 容器负责创建和管理 bean 的实例。

ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
MyBean myBean = (MyBean) context.getBean("myBean");

单例模式(Singleton Pattern)

Spring 默认以单例模式管理 bean,这意味着每个 bean 在 Spring 容器中只有一个实例。

应用场景:默认情况下,Spring 容器中的每个 bean 都是单例的。

@Component
public class MySingletonBean {// This bean will be a singleton
}

代理模式(Proxy Pattern)

Spring AOP(面向切面编程)使用代理模式来创建代理对象,以实现方法拦截和增强功能。

应用场景:AOP 实现事务管理、日志记录、安全检查等。

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

模板方法模式(Template Method Pattern)

Spring 提供了多种模板类(如JdbcTemplate、RestTemplate),这些类封装了常见的操作步骤,允许用户只需实现特定的步骤。

应用场景:简化数据库操作、RESTful 服务调用等。

@Autowired
private JdbcTemplate jdbcTemplate;public void saveData(String data) {String sql = "INSERT INTO my_table (data) VALUES (?)";jdbcTemplate.update(sql, data);
}

观察者模式(Observer Pattern)

Spring 的事件处理机制使用观察者模式。ApplicationEventPublisher和ApplicationListener是实现观察者模式的核心接口。

应用场景:实现事件驱动的编程模型。

public class MyEvent extends ApplicationEvent {public MyEvent(Object source) {super(source);}
}@Component
public class MyEventListener implements ApplicationListener<MyEvent> {@Overridepublic void onApplicationEvent(MyEvent event) {System.out.println("Received event: " + event.getSource());}
}@Component
public class MyEventPublisher {@Autowiredprivate ApplicationEventPublisher applicationEventPublisher;public void publishEvent() {MyEvent event = new MyEvent(this);applicationEventPublisher.publishEvent(event);}
}

依赖注入模式(Dependency Injection Pattern)

Spring 的核心功能之一就是依赖注入,通过构造函数注入、setter 注入或字段注入,将对象的依赖关系注入到对象中。

应用场景:解耦对象之间的依赖关系,便于测试和维护。

@Component
public class MyService {private final MyRepository myRepository;@Autowiredpublic MyService(MyRepository myRepository) {this.myRepository = myRepository;}
}

装饰器模式(Decorator Pattern)

Spring 使用装饰器模式来增强 bean 的功能,特别是在 AOP 中,通过将增强逻辑应用到目标对象上。

应用场景:动态地为对象添加职责,而不影响其他对象。

@Aspect
public class PerformanceAspect {@Around("execution(* com.example.service.*.*(..))")public Object measureExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {long start = System.currentTimeMillis();Object result = joinPoint.proceed();long executionTime = System.currentTimeMillis() - start;System.out.println("Method executed in: " + executionTime + "ms");return result;}
}

策略模式(Strategy Pattern)

Spring 中的TransactionManager使用策略模式来定义事务管理的策略,允许在运行时选择不同的事务管理器。

应用场景:定义一系列算法,允许在运行时选择具体的算法。

@Configuration
public class AppConfig {@Beanpublic PlatformTransactionManager transactionManager() {return new DataSourceTransactionManager(dataSource());}
}
http://www.dtcms.com/a/318972.html

相关文章:

  • 容器之王--Docker镜像的管理及镜像仓库的构建演练
  • W25Q64模块
  • 智慧园区系统:打造未来城市生活新体验
  • 从周末去哪儿玩到决策树:机器学习算法的生活启示
  • 机试备考笔记 7/31
  • 【数据结构】排序(sort) -- 交换排序(冒泡快排)
  • 接入免费的数字人API接口详细教程!!!——小甲鱼数字人
  • OpenCV的关于图片的一些运用
  • 一个基于 select 实现的多路复用 TCP 服务器程序:
  • Opencv-管理图片
  • 计算机视觉--opencv(代码详细教程)
  • ansible-playbook之获取服务器IP存储到本地文件
  • Spring事务失效场景?
  • 光纤滑环 – 光纤旋转接头(FORJ)- 杭州驰宏科技
  • 科技云报到:热链路革命:阿卡 CRM 的 GTM 定位突围
  • 芯谷科技--高效噪声降低解决方案压缩扩展器D5015
  • 全球化2.0 | 泰国IT服务商携手云轴科技ZStack重塑云租赁新生态
  • 安全守护,温情陪伴 — 智慧养老产品上新
  • Element Plus实现分页查询
  • 码头岸电系统如何保障供电安全?安科瑞绝缘监测及故障定位方案解析
  • Rust爬虫与代理池技术解析
  • NAS技术在县级融媒体中心的架构设计与安全运维浅析
  • VSCode ssh一直在Setting up SSH Host xxx: Copying VS Code Server to host with scp等待
  • 支付宝小程序商城怎么搭?ZKmall开源商城教你借力蚂蚁生态做增长
  • 【Agent】ReAct:最经典的Agent设计框架
  • 【pytorch(06)】全连接神经网络:基本组件认知,线性层、激活函数、损失函数、优化器
  • Django 表单:深度解析与最佳实践
  • 高性能分布式通信框架:eCAL 介绍与应用
  • 解锁高效开发:AWS 前端 Web 与移动应用解决方案详解
  • 区块链技术原理(2) -数据结构