您的位置:首页 > 财经 > 产业 > Spring使用的设计模式

Spring使用的设计模式

2024/10/6 16:19:50 来源:https://blog.csdn.net/qq_42029265/article/details/139272080  浏览:    关键词:Spring使用的设计模式

Spring 框架是一个广泛使用的 Java 框架,它内部使用了多种设计模式来简化开发过程、提高代码的可维护性和扩展性。
以下是一些在 Spring 框架中常见的设计模式,以及用代码示例来解释它们:

一、工厂模式(Factory Pattern)

Spring 使用工厂模式来创建和管理对象。例如,BeanFactory 是一个接口,定义了获取不同类型 bean 的方法。

// 示例代码(非实际 Spring 代码)  
public interface BeanFactory {  <T> T getBean(Class<T> requiredType);  
}  // 实现类  
public class DefaultListableBeanFactory implements BeanFactory {  // ... 实现细节 ...  @Override  public <T> T getBean(Class<T> requiredType) {  // 查找并返回 bean 实例  return (T) findBean(requiredType);  }  private Object findBean(Class<?> requiredType) {  // 实现细节...  return null; // 示例返回 null  }  
}

二、单例模式(Singleton Pattern)

Spring 容器中的 bean 默认是单例的。这确保了每个 bean 在容器中只有一个实例。

// Spring 配置文件中定义 bean 为单例  
<bean id="myBean" class="com.example.MyBean" scope="singleton" />  // MyBean 类不需要任何特殊的单例模式实现  
public class MyBean {  // ...  
}

三、原型模式(Prototype Pattern)

虽然默认是单例,但 Spring 也支持原型模式,允许每次请求时都创建一个新的 bean 实例。

// Spring 配置文件中定义 bean 为原型  
<bean id="myPrototypeBean" class="com.example.MyPrototypeBean" scope="prototype" />  // MyPrototypeBean 类不需要任何特殊的原型模式实现  
public class MyPrototypeBean {  // ...  
}

四、代理模式(Proxy Pattern)

Spring AOP 使用了代理模式来创建代理对象,这些对象可以在方法调用前后执行额外的逻辑(如事务管理、日志记录等)。

// 使用 AspectJ 或 JDK 动态代理实现的示例  
@Aspect  
@Component  
public class LoggingAspect {  @Before("execution(* com.example.*.*(..))")  public void logBefore(JoinPoint joinPoint) {  System.out.println("Method " + joinPoint.getSignature() + " is called.");  }  // ... 其他通知 ...  
}

五、模板方法模式(Template Method Pattern)

Spring 的 JdbcTemplate、JmsTemplate 等模板类就是模板方法模式的体现。它们定义了操作资源(如数据库、JMS 队列)的通用步骤,而将特定于应用的逻辑留给子类或回调方法来实现。

// 示例代码(非实际 Spring JdbcTemplate)  
public class CustomJdbcTemplate {  public List<Map<String, Object>> query(String sql, RowMapper<Map<String, Object>> rowMapper) {  // 模板方法:打开连接、执行查询、关闭连接等  // ...  // 调用回调方法处理结果集  List<Map<String, Object>> results = new ArrayList<>();  while (resultSet.next()) {  results.add(rowMapper.mapRow(resultSet, rowNum++));  }  // ...  return results;  }  
}

六、观察者模式(Observer Pattern)

Spring 的事件驱动模型使用了观察者模式。当某个事件发生时,所有注册的观察者都会收到通知。

// 定义一个事件  
public class MyEvent extends ApplicationEvent {  // ...  
}  // 定义一个监听器(观察者)  
@Component  
public class MyEventListener implements ApplicationListener<MyEvent> {  @Override  public void onApplicationEvent(MyEvent event) {  // 处理事件  }  
}  // 在某处发布事件  
applicationContext.publishEvent(new MyEvent(/*...*/));

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com