springboot動態註冊requestmapping(原創)

配置:

patterns.request.condition=/ken/**,/jon/**

代碼:

package com.huiguan;

import java.lang.reflect.Method;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.util.ReflectionUtils;
import org.springframework.web.servlet.mvc.condition.PatternsRequestCondition;
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;

import com.huiguan.spring.boot.starter.web.holder.SpringContextHolder;

@SpringBootApplication
@ComponentScan(value = "com.huiguan")
public class DemoApplication implements CommandLineRunner{

	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}
	
	
	@Value("${patterns.request.condition}")
	private String[] patterns;

	@Override
	public void run(String... args) throws Exception {
		
		RequestMappingHandlerMapping requestMappingHandlerMapping = SpringContextHolder.getBean(RequestMappingHandlerMapping.class);

		Class<?> entry = com.huiguan.controller.IndexController.class;
		
		Method method_name = ReflectionUtils.findMethod(entry, "t2", HttpServletRequest.class, HttpServletResponse.class);
		
		final String[] arr = patterns;
		
		PatternsRequestCondition patterns = new PatternsRequestCondition(arr);
		
		RequestMappingInfo mapping_info = new RequestMappingInfo("name", patterns, null, null, null, null, null, null);
		
		requestMappingHandlerMapping.registerMapping(mapping_info, entry.newInstance(), method_name);
		
	}
	
}

 

提示:代碼中SpringContextHolder類是自己寫的,主要用於保存spring的上下文,同學們可以自己參考其它項目寫一個,我這邊涉及的東西比較多,就不放出來了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章