1. 程式人生 > >由SpringMVC中的Controller註解@RequestMapping引發的思考

由SpringMVC中的Controller註解@RequestMapping引發的思考

<span style="font-family:Times New Roman;">package thinkinginjava;

import java.lang.reflect.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class UseCaseTracker {
	public static void trackUseCases(List<Integer> useCases, Class<?> cl) {
		for (Method m : cl.getDeclaredMethods()) {
			System.out.println(m.toString());
			UseCase uc = m.getAnnotation(UseCase.class);
			if (uc != null) {
				System.out.println("Found Use Case : " + uc.id() + " " + uc.description());
				if(uc.id() == 48){
					try {
						Object pwdu = cl.newInstance();
						System.out.println(cl.isInstance(pwdu));
						System.out.println(m.invoke(pwdu, "jichenxiao"));
					} catch (IllegalAccessException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (IllegalArgumentException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (InvocationTargetException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (InstantiationException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
				useCases.remove(new Integer(uc.id()));
			}
		}
		for(int i : useCases){
			System.out.println("Warning: Missing Use Case - " + i);
		}
	}

	public static void main(String[] args){
		List<Integer> useCases = new ArrayList<Integer>();
		Collections.addAll(useCases, 47,48,49);
		trackUseCases(useCases, PasswordUtils.class);
	}
}</span><span style="font-family:Microsoft YaHei;">
</span>

上述程式中使用了反射,getDeclaredMethods()和getAnnotation()均屬於AnnotationElement介面(Class、Method和Filed等類都實現了該介面)。通過getDeclaredMethod()返回類中的方法,型別為Method,然後再使用getAnnotation()返回UseCase註解物件。如果被註解的方法中沒有該型別的註解,則返回null。通過id()和description()方法從UseCase中提取元素的值。通過註解命中一個方法,並使用invoke()去呼叫該方法。最終的輸出結果為:

相關推薦

SpringMVCController註解@RequestMapping引發思考

<span style="font-family:Times New Roman;">package thinkinginjava; import java.lang.reflect.*; import java.util.ArrayList; import java.util.Collecti

SpringMVC@Controller和@RequestMapping用法和其他常用註解

一、簡介          在SpringMVC 中,控制器Controller 負責處理由DispatcherServlet 分發的請求,它把使用者請求的資料經過業務處理層處理之後封裝成一個Model ,然後再把該Model 返回給對應的View 進行展示。在Spring

SpringMVC@Controller和@RequestMapping用法

fff set blank content block 方法 封裝 keyword 屬性 一、簡介 在SpringMVC 中,控制器Controller 負責處理由DispatcherServlet 分發的請求,它把用戶請求的數據經過業務處理層處理之後封裝

SpringMVCcontroller入參接收部分註解簡單介紹

RequestHeader:@RequestHeader 註解,可以把Request請求header部分的值繫結到方法的引數上。 public void getAccountByOpenId(@RequestHeader("id") String id){}; api:

SpringMVC】@Controller和@RequestMapping註解說明

一、@Controller註解 1、說明: 用於指示Spring類的例項是一個控制器,控制器可以支援同時處理多個請求動作。 2、保證Spring能找到控制器: (1)在SpringMVC的配置檔案的標頭檔案中引入spring-context (2)使用

SpringMVCController的@ResponseBody註解分析

需求分析:需要 利用    out 物件返回給財付通是否接收成功 。那麼將需要如下程式碼: /** * 返回處理結果給財付通伺服器。 * @param msg: Success or fail。 * @throws IOExcepti

SpringMVCRequetContextListener說起

listener attribute 請求 bool 程序 div n) https 操作 零、引言 RequetContextListener從名字結尾Listener來看就知道屬於監聽器。 所謂監聽器就是監聽某種動作,在其開始(初始化)和結束(銷毀)的時候進行

SpringMVCcontroller返回json數據的兩種方法

rac new enter req imp 工具 response 返回 basepath SpringMVC中controller返回json數據的兩種方法 1.jsp的ajax請求: function getJson(){ $.ajax({ t

springMVC註解@RequestParam與@PathVariable的區別

actor nal lencod mat 控制 關系 tor oid 沒有 @PathVariable綁定URI模板變量值 @PathVariable是用來獲得請求url中的動態參數的 @PathVariable用於將請求URL中的模板變量映射到功能處理方法的參數上。//配

關於SpringMVCController接口的三種實現類的使用與說明

resolv term strac editor 服務 xml配置 數據加載 edi add 要說Controller接口的實現類使用與說明之前,先簡要說明一下SpringMVC的工作原理。 ①客戶端發出一個請求,web服務器接受了這個請求後,就會與web.xml中配置的D

詳解SpringMVCController的方法參數的工作原理

使用 extc component 格式 cab swa sse 字符串 logs Spring MVC中Controller的處理方法的參數可以是Integer,String,自定義對象,ServletRequest,ServletResponse,ModelAndVie

springmvc@requestbody註解接收請求引數

一、POST請求的四種常用方式   1、application/x-www-form-urlencoded     瀏覽器原生的表單,值為urlencoded之後的  key1=value1&key2=value2......   2、multipart/form-data     

springmvc@requestbody註解接收請求參數

pri 傳輸 四種 文件表 multi post 傳輸文件 解析json 方式 一、POST請求的四種常用方式   1、application/x-www-form-urlencoded     瀏覽器原生的表單,值為urlencoded之後的 key1=value1&a

SpringBoot,Spring 常用註解@RequestMapping/@GetMapping/@PostMapping /@PutMapping/@DeleteMapping介紹

1、@Controller @Controller 用來響應頁面,表示當前的類為控制器。 2、@RestController @RestController 是@ResponseBody和@Controller的結合 表明當前類是控制器且返回的是一

SpringMVCcontroller接收Json資料

1.jsp頁面傳送ajax的post請求: function postJson(){ var json = {“username” : “imp”, “password” : “123456”}; $.ajax({ type : “post”, url : “<%=bas

SpringMVC】2. 註解@RequestMapping的使用

注意!!! 此文章需要配置了SpringDispatcherServlet和InternalResourceViewResolver才能夠使用,如果不會配置,請翻看我【SpringMVC】系列的第一篇文章《【SpringMVC】1. SpringMVC的第一個程

SpringMVCcontroller接收Json資料(重要)!

SpringMVC中controller接收Json資料 1.jsp頁面傳送ajax的post請求: function postJson(){ var json = {"username" : "imp", "password" : "123456"};

SpringMVC@ModelAttribute註解的作用

[email protected]註釋void返回值的方法 [java] view plain copy   print? @Controller   public class HelloModelController {       @Mo

springmvcController方法的返回值

圖解 action ons 轉發 mod dispatch 結果 oid 請求轉發 1.1 返回ModelAndView   controller方法中定義ModelAndView對象並返回,對象中可添加model數據、指定view。 1.2 返回void 在contr

使用jodd form簡化SpringMVCController的配置

Jodd是一個開源專案,,有一個好用的jsp標籤,可以大大簡化有表單輸入的controller。 使用Jodd的優點: <!--[if !supportLists]-->1.<!--[endif]-->簡化和統一controller,拋棄extend