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

网站建设图片上传操作深圳市企业网站seo营销工具

网站建设图片上传操作,深圳市企业网站seo营销工具,深圳网站建设金瓷网络,公司设计网站需要包含什么资料前言 本文涉及到适配模式的基本用法,以及在Spring AOP中如何使用,首先需要了解适配模式的工作原理,然后结合Spring AOP的具体实现来详细详细解析源码。 首先,适配模式,也就是Adapter Pattern,属于结构型设计…
前言

  本文涉及到适配模式的基本用法,以及在Spring AOP中如何使用,首先需要了解适配模式的工作原理,然后结合Spring AOP的具体实现来详细详细解析源码。

  首先,适配模式,也就是Adapter Pattern,属于结构型设计模式,主要用于让不兼容的接口能够一起工作。要了解它的定义、结构、应用场景以及优缺点。然后,可能需要一个具体的例子来说明,比如电压适配器,这样用户更容易理解。

  接下来是Spring AOP中的拦截器链。如果对AOP的概念有一定了解,但想深入知道拦截器链是如何通过适配模式实现的。这里需要分析Spring AOP的源码,特别是MethodInterceptor接口和AdvisorAdapter的作用。需要提到具体的类,比如MethodBeforeAdviceAdapter、AfterReturningAdviceAdapter和ThrowsAdviceAdapter,以及它们如何将不同类型的Advice适配成统一的MethodInterceptor。

  实际开发中遇到需要整合不同接口的情况,或者在使用Spring AOP时想自定义拦截器,了解底层实现有助于调试和扩展。

  总结来说,回答需要分为两部分:适配模式的讲解和Spring AOP拦截器链的源码分析。结合理论、示例和源码。


一、适配模式(Adapter Pattern)解析

适配模式是一种 结构型设计模式,用于将不兼容的接口转换为客户端期望的接口,使原本无法协同工作的类能够一起工作。其核心思想是 通过一个中间层(适配器)解决接口不匹配问题

1. 适配模式的结构
角色描述
目标接口客户端期望的接口(如 Target)。
被适配者需要被适配的现有类(如 Adaptee)。
适配器实现目标接口,并持有被适配者的引用,转换调用逻辑(如 Adapter)。
2. 适配模式示例

场景:将电压 220V 转换为 5V(USB 充电器即为适配器)。

// 目标接口:期望的5V电压
interface Voltage5V {int output5V();
}// 被适配者:现有的220V电源
class Voltage220V {public int output220V() {return 220;}
}// 适配器:将220V转换为5V
class VoltageAdapter implements Voltage5V {private Voltage220V voltage220V;public VoltageAdapter(Voltage220V voltage220V) {this.voltage220V = voltage220V;}@Overridepublic int output5V() {int src = voltage220V.output220V();return src / 44; // 转换为5V}
}// 客户端使用
public class Client {public static void main(String[] args) {Voltage5V adapter = new VoltageAdapter(new Voltage220V());System.out.println(adapter.output5V()); // 输出5}
}
3. 适配模式的类型
  • 类适配器:通过继承被适配者实现(需支持多继承,Java中不适用)。
  • 对象适配器:通过组合被适配者实现(推荐方式)。
4. 适配模式的优缺点
  • 优点
    • 解耦客户端与被适配者。
    • 符合开闭原则,无需修改现有代码。
  • 缺点
    • 过度使用可能导致系统复杂化。
5. 应用场景
  • 整合遗留代码或第三方库。
  • 统一多个类的接口(如日志框架适配)。

二、Spring AOP 拦截器链的源码解析

Spring AOP 的拦截器链(Interceptor Chain)基于 责任链模式,但其底层实现中大量使用了 适配模式,将不同类型的通知(Advice)适配为统一的 MethodInterceptor

1. Spring AOP 核心接口
接口作用
MethodInterceptor方法拦截器,在方法调用前后执行逻辑(AOP Alliance 标准接口)。
Advice通知的标记接口(如 BeforeAdviceAfterReturningAdvice)。
Advisor组合 Advice 和切点(Pointcut),确定在何处应用通知。
2. 适配模式在拦截器链中的应用

Spring 通过 适配器(AdvisorAdapter) 将不同类型的 Advice 转换为 MethodInterceptor,以便统一执行。

源码示例:AdvisorAdapter 实现类

Spring 内置三种适配器,对应不同类型的通知:

  1. MethodBeforeAdviceAdapter:将 MethodBeforeAdvice 适配为 MethodInterceptor
  2. AfterReturningAdviceAdapter:将 AfterReturningAdvice 适配为 MethodInterceptor
  3. ThrowsAdviceAdapter:将 ThrowsAdvice 适配为 MethodInterceptor

MethodBeforeAdviceAdapter 为例

class MethodBeforeAdviceAdapter implements AdvisorAdapter {@Overridepublic boolean supportsAdvice(Advice advice) {return (advice instanceof MethodBeforeAdvice);}@Overridepublic MethodInterceptor getInterceptor(Advisor advisor) {MethodBeforeAdvice advice = (MethodBeforeAdvice) advisor.getAdvice();return new MethodBeforeAdviceInterceptor(advice);}
}
拦截器链的构建流程
  1. 创建代理对象:通过 ProxyFactory 创建目标对象的代理。
  2. 获取所有 Advisor:根据切面配置,筛选匹配的 Advisor。
  3. 适配为拦截器:调用 AdvisorAdapterRegistry 将 Advisor 中的 Advice 转换为 MethodInterceptor
  4. 排序拦截器:按优先级排序拦截器,形成调用链。

源码入口DefaultAdvisorChainFactory.getInterceptorsAndDynamicInterceptionAdvice()

public List<Object> getInterceptorsAndDynamicInterceptionAdvice(AdvisorChainFactory config, Method method, Class<?> targetClass) {List<Object> interceptorList = new ArrayList<>();for (Advisor advisor : config.getAdvisors()) {if (advisor instanceof PointcutAdvisor) {// 检查切点是否匹配方法if (((PointcutAdvisor) advisor).getPointcut().getMethodMatcher().matches(method, targetClass)) {// 通过适配器转换为 MethodInterceptorMethodInterceptor[] interceptors = config.getInterceptors(advisor);interceptorList.addAll(Arrays.asList(interceptors));}}}return interceptorList;
}
3. 拦截器链的执行流程

拦截器链的执行通过 ReflectiveMethodInvocation 实现,采用 递归调用模式

源码示例ReflectiveMethodInvocation.proceed()

public class ReflectiveMethodInvocation implements ProxyMethodInvocation {private final List<?> interceptorsAndDynamicMethodMatchers;private int currentInterceptorIndex = -1;public Object proceed() throws Throwable {// 所有拦截器执行完毕,调用原始方法if (this.currentInterceptorIndex == this.interceptorsAndDynamicMethodMatchers.size() - 1) {return invokeJoinpoint();}// 获取下一个拦截器并执行Object interceptor = this.interceptorsAndDynamicMethodMatchers.get(++this.currentInterceptorIndex);if (interceptor instanceof MethodInterceptor) {MethodInterceptor mi = (MethodInterceptor) interceptor;return mi.invoke(this);}// ...}
}
4. 示例:拦截器链的执行顺序

假设存在以下拦截器:

  1. Before Advice:方法执行前打印日志。
  2. Around Advice:计算方法执行时间。
  3. After Advice:方法执行后清理资源。

调用流程

┌→ BeforeAdviceInterceptor
│  ┌→ AroundAdviceInterceptor.proceed()
│  │  ┌→ 目标方法执行
│  │  └→ AroundAdviceInterceptor 计算耗时
│  └→ AfterAdviceInterceptor
└─ 返回结果

三、总结

设计模式在 Spring AOP 中的应用
适配模式将不同类型的 Advice 转换为统一的 MethodInterceptor
责任链模式拦截器链按顺序执行,每个拦截器决定是否传递调用。

源码核心类

  • AdvisorAdapter:适配 AdviceMethodInterceptor
  • ReflectiveMethodInvocation:递归执行拦截器链。
  • ProxyFactory:创建代理对象并管理拦截器。

通过适配模式,Spring AOP 实现了对多种通知类型的统一处理,而拦截器链机制则确保了切面逻辑的灵活组合与执行。这一设计充分体现了 高内聚、低耦合 的架构思想。

http://www.hkea.cn/news/199579/

相关文章:

  • 东莞市建设公共交易中心网站百度官网首页
  • 如何建立的网站能争钱优化营商环境 助推高质量发展
  • 做百度网站营销型网站建设排名
  • 网站域名被黑国际新闻最新消息战争
  • 苏州网站开发公司济南兴田德润厉害吗网络自动推广软件
  • 广药网站建设试卷株洲最新今日头条
  • 网站建设管理考核办法微信推广平台怎么做
  • 网站新闻模块代码网络推广有哪些常见的推广方法
  • 合肥大型网站如何推广普通话
  • 高端网站制作软件怎么样推广自己的店铺和产品
  • 无障碍浏览网站怎么做关键词seo排名优化推荐
  • wordpress 247seo推广系统
  • 做深圳门户网站起什么名字好泰州seo外包公司
  • 网站视频上传怎么做百度站长平台论坛
  • wordpress农业模板下载小时seo
  • 做网站语言排名2018发帖推广哪个平台好
  • 销氪crmseo入门讲解
  • 蒙阴哪有做淘宝网站的钓鱼网站制作教程
  • 网站如何做导航条下拉菜单怎么做百度网页
  • 网站开发都做什么平台推广精准客源
  • 网站建设共享ip宁波seo搜索引擎优化
  • 学校网站建设必要性搜索引擎排名
  • 哪里有做区块链网站的百度网址大全在哪里找
  • 加盟平台网站怎么做竞价托管多少钱一个月
  • wordpress 微信 代码网站关键词怎么优化排名
  • 网站推广维护考研培训班哪个机构比较好
  • 网站后台生成器人工智能培训班收费标准
  • 在线做app的网站武汉网络营销公司排名
  • 了解深圳网站页面设计潍坊百度关键词优化
  • 制作网站怎样找公司来帮做seo词条