摘要:序本文主要聊一下如何在容器啟動(dòng)時(shí),獲取有自定義注解的方法信息。主要用到這個(gè)方法通過(guò)這個(gè)就可以獲取具體的請(qǐng)求的方法,然后利用反射去判斷是否有標(biāo)注自己所需要的注解。啟動(dòng)時(shí)處理實(shí)現(xiàn)接口,在在中去處理這樣就大功告成了
序
本文主要聊一下如何在spring容器啟動(dòng)時(shí),獲取有自定義注解的方法信息。
RequestMappingHandlerMappingspring-webmvc-4.3.10.RELEASE-sources.jar!/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerMapping.java
public class RequestMappingHandlerMapping extends RequestMappingInfoHandlerMapping implements MatchableHandlerMapping, EmbeddedValueResolverAware { private boolean useSuffixPatternMatch = true; private boolean useRegisteredSuffixPatternMatch = false; private boolean useTrailingSlashMatch = true; private ContentNegotiationManager contentNegotiationManager = new ContentNegotiationManager(); private StringValueResolver embeddedValueResolver; private RequestMappingInfo.BuilderConfiguration config = new RequestMappingInfo.BuilderConfiguration(); //.... }
getHandlerMethods
spring-webmvc-4.3.10.RELEASE-sources.jar!/org/springframework/web/servlet/handler/AbstractHandlerMethodMapping.java
/** * Return a (read-only) map with all mappings and HandlerMethod"s. */ public MapgetHandlerMethods() { this.mappingRegistry.acquireReadLock(); try { return Collections.unmodifiableMap(this.mappingRegistry.getMappings()); } finally { this.mappingRegistry.releaseReadLock(); } }
Map主要用到這個(gè)getHandlerMethods方法
for(Map.Entryentry : urlMethodMapping.entrySet()){ RequestMappingInfo info = entry.getKey(); HandlerMethod handlerMethod = entry.getValue(); Method method = handlerMethod.getMethod(); if(!method.isAnnotationPresent(DemoAnno.class)){ continue; } DemoAnno demoAnno = method.getAnnotation(DemoAnno.class); //...... }
啟動(dòng)時(shí)處理通過(guò)這個(gè)HandlerMethod就可以獲取具體的請(qǐng)求的方法,然后利用反射去判斷是否有標(biāo)注自己所需要的注解。
實(shí)現(xiàn)ApplicationListener
@Override public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { //....... }
在onApplicationEvent中去處理
這樣就大功告成了
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/67950.html
摘要:數(shù)據(jù)綁定負(fù)責(zé)將中的信息以一定的方式轉(zhuǎn)換并綁定到處理方法的參數(shù)上。整個(gè)過(guò)程的處理核心是由完成。數(shù)據(jù)轉(zhuǎn)換在語(yǔ)言中,在包中提供了一個(gè)接口來(lái)進(jìn)行數(shù)據(jù)轉(zhuǎn)換,的核心功能是將一個(gè)轉(zhuǎn)換為一個(gè)對(duì)象。 數(shù)據(jù)綁定 SpringMVC負(fù)責(zé)將request中的信息以一定的方式轉(zhuǎn)換并綁定到處理方法的參數(shù)上。整個(gè)過(guò)程的處理核心是由DataBinder完成。轉(zhuǎn)換流程如下:1.DataBinder從ServletReq...
摘要:只要有一個(gè)攔截器不放行,不能執(zhí)行完成號(hào)不放行和號(hào)不放行測(cè)試結(jié)果總結(jié)只有前邊的攔截器方法放行,下邊的攔截器的才執(zhí)行。至于他們的攔截器鏈的調(diào)用順序,和的是沒(méi)有差別的。 前言 本博文主要講解的知識(shí)點(diǎn)如下: 校驗(yàn)器 統(tǒng)一處理異常 RESTful 攔截器 Validation 在我們的Struts2中,我們是繼承ActionSupport來(lái)實(shí)現(xiàn)校驗(yàn)的...它有兩種方式來(lái)實(shí)現(xiàn)校驗(yàn)的功能 手寫(xiě)...
摘要:示例代碼如下添加的設(shè)置默認(rèn)的配置對(duì)應(yīng)的是原來(lái)的如何使用注解從主庫(kù)到備庫(kù)的切換 摘要: 本篇文章的場(chǎng)景是做調(diào)度中心和監(jiān)控中心時(shí)的需求,后端使用TDDL實(shí)現(xiàn)分表分庫(kù),需求:實(shí)現(xiàn)關(guān)鍵業(yè)務(wù)的查詢監(jiān)控,當(dāng)用Mybatis查詢數(shù)據(jù)時(shí)需要從主庫(kù)切換到備庫(kù)或者直接連到備庫(kù)上查詢,從而減小主庫(kù)的壓力,在本篇文章中主要記錄在Spring Boot中通過(guò)自定義注解結(jié)合AOP實(shí)現(xiàn)直接連接備庫(kù)查詢。 一.通過(guò)A...
摘要:時(shí)間年月日星期日說(shuō)明本文部分內(nèi)容均來(lái)自慕課網(wǎng)。慕課網(wǎng)教學(xué)示例源碼個(gè)人學(xué)習(xí)源碼第一章課程介紹課程介紹本課程緊接著小時(shí)學(xué)會(huì)課程,請(qǐng)先看入門(mén)課。異常返回通知在連接點(diǎn)拋出異常后執(zhí)行。 時(shí)間:2017年3月19日星期日說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)示例源碼:https://github.com/zccodere/s...個(gè)人學(xué)習(xí)源碼:htt...
摘要:在前面的過(guò)程中,我們創(chuàng)建了個(gè)服務(wù)發(fā)現(xiàn)我們使用作為服務(wù)發(fā)現(xiàn)組件,學(xué)習(xí)了的使用。加依賴加注解改配置使用項(xiàng)目三部曲,我們可以快速添加一個(gè)新組件,并正常使用這個(gè)我沒(méi)有在項(xiàng)目中實(shí)現(xiàn),但是大家可以和一樣,三部曲搞定。 在前面的過(guò)程中,我們創(chuàng)建了4個(gè)project: 服務(wù)發(fā)現(xiàn) 我們使用Eureka 作為服務(wù)發(fā)現(xiàn)組件,學(xué)習(xí)了Eureka Server,Eureka Client的使用。 Eureka...
閱讀 3518·2023-04-25 15:52
閱讀 588·2021-11-19 09:40
閱讀 2612·2021-09-26 09:47
閱讀 1034·2021-09-22 15:17
閱讀 3557·2021-08-13 13:25
閱讀 2233·2019-08-30 15:56
閱讀 3472·2019-08-30 13:56
閱讀 2112·2019-08-30 11:27