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

1核2g 做网站211工程建设网站

1核2g 做网站,211工程建设网站,计算机应用网站开发,wordpress注册用户一、引言​ 在 Spring 框架的生态系统中,众多组件需要协同工作。有时,我们希望某些组件按照特定的顺序执行,例如在拦截器链、事件监听器等场景下。org.springframework.core.Ordered接口应运而生,它提供了一种简单而有效的方式来定…

一、引言​

在 Spring 框架的生态系统中,众多组件需要协同工作。有时,我们希望某些组件按照特定的顺序执行,例如在拦截器链、事件监听器等场景下。org.springframework.core.Ordered接口应运而生,它提供了一种简单而有效的方式来定义组件的执行顺序。​

二、Ordered接口概述​

Ordered接口非常简洁,它只包含一个方法:

int getOrder();

该方法返回一个整数值,用于表示组件的顺序。值越小,优先级越高,执行顺序越靠前。Spring 框架中预定义了一些常用的顺序常量,例如:

public interface Ordered {int HIGHEST_PRECEDENCE = -2147483648;int LOWEST_PRECEDENCE = 2147483647;
}

三、实战场景一:自定义拦截器顺序​

假设我们有一个 Web 应用,需要定义多个拦截器,并且希望它们按照特定的顺序执行。​

(一)创建自定义拦截器​

首先,创建两个实现HandlerInterceptor接口的自定义拦截器,并实现Ordered接口。

自定义拦截器1:

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.core.Ordered;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class FirstInterceptor implements HandlerInterceptor, Ordered {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("FirstInterceptor preHandle");return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("FirstInterceptor postHandle");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("FirstInterceptor afterCompletion");}@Overridepublic int getOrder() {return 1;}
}

自定义拦截器2:

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.core.Ordered;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class SecondInterceptor implements HandlerInterceptor, Ordered {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("SecondInterceptor preHandle");return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("SecondInterceptor postHandle");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("SecondInterceptor afterCompletion");}@Overridepublic int getOrder() {return 2;}
}

(二)配置拦截器​

在 Spring 的配置类中注册并配置这两个拦截器。

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class WebMvcConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new FirstInterceptor()).addPathPatterns("/**");registry.addInterceptor(new SecondInterceptor()).addPathPatterns("/**");}
}

当请求到达时,控制台输出结果如下:

FirstInterceptor preHandle
SecondInterceptor preHandle
SecondInterceptor postHandle
FirstInterceptor postHandle
SecondInterceptor afterCompletion
FirstInterceptor afterCompletion

可以看到,FirstInterceptor的preHandle方法先执行,因为它的getOrder()返回值更小,优先级更高。

四、实战场景二:事件监听器顺序​

Spring 的事件驱动模型中,也可以利用Ordered接口来控制事件监听器的执行顺序。​

(一)定义自定义事件

import org.springframework.context.ApplicationEvent;public class CustomEvent extends ApplicationEvent {public CustomEvent(Object source) {super(source);}
}

(二)创建事件监听器​

创建两个实现ApplicationListener接口的事件监听器,并实现Ordered接口。

事件监听器1:

import org.springframework.context.ApplicationListener;
import org.springframework.core.Ordered;public class FirstEventListener implements ApplicationListener<CustomEvent>, Ordered {@Overridepublic void onApplicationEvent(CustomEvent event) {System.out.println("FirstEventListener received event");}@Overridepublic int getOrder() {return 1;}
}

事件监听器2:

import org.springframework.context.ApplicationListener;
import org.springframework.core.Ordered;public class SecondEventListener implements ApplicationListener<CustomEvent>, Ordered {@Overridepublic void onApplicationEvent(CustomEvent event) {System.out.println("SecondEventListener received event");}@Overridepublic int getOrder() {return 2;}
}

(三)发布事件​

在某个服务类中发布自定义事件。

import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;
import org.springframework.stereotype.Service;@Service
public class EventPublisherService implements ApplicationEventPublisherAware {private ApplicationEventPublisher applicationEventPublisher;@Overridepublic void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {this.applicationEventPublisher = applicationEventPublisher;}public void publishCustomEvent() {CustomEvent customEvent = new CustomEvent(this);applicationEventPublisher.publishEvent(customEvent);}
}

当调用publishCustomEvent方法时,控制台输出结果如下:

FirstEventListener received event
SecondEventListener received event

再次验证了Ordered接口对执行顺序的控制。

五、总结​

通过上述两个实战场景,我们深入了解了org.springframework.core.Ordered接口在 Spring 框架中的应用。无论是自定义拦截器还是事件监听器,合理使用Ordered接口可以确保组件按照我们期望的顺序执行,从而提升系统的稳定性和可维护性。在实际项目中,根据业务需求灵活运用这一特性,将有助于构建更加健壮和高效的 Spring 应用。​


文章转载自:

http://ZeccVPl4.qynnw.cn
http://8M3ftc57.qynnw.cn
http://7NSnYW07.qynnw.cn
http://RE5vzOg6.qynnw.cn
http://TS2K57bl.qynnw.cn
http://UcurNi9s.qynnw.cn
http://AxOX4KFT.qynnw.cn
http://OPWSyaOv.qynnw.cn
http://uZjYI3SJ.qynnw.cn
http://l0oox36k.qynnw.cn
http://lMJnWVDV.qynnw.cn
http://fr7D3DY0.qynnw.cn
http://C8R75AYQ.qynnw.cn
http://12O9iULi.qynnw.cn
http://tEUXDoRe.qynnw.cn
http://vly5SdTr.qynnw.cn
http://vQ13OzKM.qynnw.cn
http://aRl4jlHQ.qynnw.cn
http://72yH59o6.qynnw.cn
http://hKMja0zK.qynnw.cn
http://FY3LwEDa.qynnw.cn
http://9ZwSbF1H.qynnw.cn
http://2XdYjbZd.qynnw.cn
http://I0mzEaf9.qynnw.cn
http://73E4EDsh.qynnw.cn
http://vXMAa2fc.qynnw.cn
http://MWycw8fE.qynnw.cn
http://B8XsgjJE.qynnw.cn
http://5xcvRSYw.qynnw.cn
http://mavU3p1n.qynnw.cn
http://www.dtcms.com/wzjs/750052.html

相关文章:

  • 开发网站 要网站icp经营许可证吗建设一个私人视频网站
  • 河北辛集住房和城乡建设厅网站潍坊视频类网站建设
  • 域名解析后多久打开网站成都便宜做网站的
  • 北京网站设计入门手机网站 多html
  • 如何做新闻类网站分销商城搭建
  • 电子商务网站的建设步骤有建建设网站的
  • 网站建设运维合同网址导航哪个好
  • 私人为别人做网站违法问题门户网站要用什么软件做
  • dede网站mip怎么让客户做网站优化
  • 精品课程网站怎么做深圳制作网站流程
  • 可以免费学编程的网站简单网站html模板下载地址
  • 电商型网站是否是趋势营销模式有哪些
  • 秦皇岛网站建设报价免费网站建设程序
  • 常德做网站报价公司做网站都咨询哪些问题
  • 深圳福田特价网站建设开发定制软件
  • 网站怎么建设商城做网站用什么软件
  • 手机网站 微信链接怎么做长春做网站的公司有哪些
  • 质量好网站建设加工农业局网站建设方案
  • 最好的网站模版海南百度竞价推广
  • 重庆旅游泰安优化公司
  • 要想让别人网站卖我的东西怎么做效果图网站推荐大全面包砖
  • 网站类网站开发网站建设主要考虑哪些因素
  • 利用切片做网站背景图片合肥建设厅网站
  • 免费ppt模板制作软件网站建设推广优化公司
  • 网站内容要求网页前端开发流程
  • 在线观看网址最新电影宁波优化网页基本流程
  • 珠海网站制作公司wordpress文章推广插件
  • 自己做网站需要什么条件wordpress密码正确登录不了
  • 安全的网站制作公司赣州卫生人才考试网
  • 汕头企业网站推广技巧重庆网站推广产品