从其他类中通过 request获取处理请求的Controller类和方法,进而通过反射处理一些事情
具体代码如下:
//通过ApplicationContext上下文(spring)找到RequestMappingHandlerMapping这个bean
RequestMappingHandlerMapping handlerMapping = ApplicationContextUtil.getBean(RequestMappingHandlerMapping.class);
//RequestMappingHandlerMapping是对应url和处理类方法的一个类
HandlerExecutionChain handlerChain = handlerMapping.getHandler(request);
//通过处理链找到对应的HandlerMethod类
HandlerMethod handler = (HandlerMethod) handlerChain.getHandler();
//HandlerMethod中有bean和method
Object bean = handler.getBean();//处理请求的类
Method method = handler.getMethod();//处理请求的方法
ApplicationContextUtil工具类,用于获取应用上下文
package *;
import *;
@Component
public class ApplicationContextUtil implements ApplicationContextAware{
private static ApplicationContext applicationContext;
/**
* 实现ApplicationContextAware接口的回调方法,设置上下文环境
*
* @param applicationContext spring上下文对象
* @throws BeansException 抛出spring异常
*/
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
ApplicationContextUtil.applicationContext = applicationContext;
}
/**
* @return ApplicationContext
*/
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
/**
* 获取对象
*
* @param name spring配置文件中配置的bean名或注解的名称
* @return 一个以所给名字注册的bean的实例
* @throws BeansException 抛出spring异常
*/
@SuppressWarnings("unchecked")
public static <T> T getBean(String name) throws BeansException {
return (T) applicationContext.getBean(name);
}
/**
* 获取类型为requiredType的对象
*
* @param clazz 需要获取的bean的类型
* @return 该类型的一个在ioc容器中的bean
* @throws BeansException 抛出spring异常
*/
public static <T> T getBean(Class<T> clazz) throws BeansException {
return applicationContext.getBean(clazz);
}
/**
* 如果ioc容器中包含一个与所给名称匹配的bean定义,则返回true否则返回false
*
* @param name ioc容器中注册的bean名称
* @return 存在返回true否则返回false
*/
public static boolean containsBean(String name) {
return applicationContext.containsBean(name);
}
}