package com.epkj.spring;
import java.util.Iterator;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
@Controller
@RequestMapping("/ControllerReflect.do")
public class ControllerReflect {
@ResponseBody
@RequestMapping(params="method=getUrlMapping")
public Object getUrlMapping(HttpServletRequest request) {
WebApplicationContext wc = getWebApplicationContext(request.getSession().getServletContext());
RequestMappingHandlerMapping rmhp = wc.getBean(RequestMappingHandlerMapping.class);
Map<RequestMappingInfo, HandlerMethod> map = rmhp.getHandlerMethods();
for (Iterator<RequestMappingInfo> iterator = map.keySet().iterator(); iterator
.hasNext();) {
RequestMappingInfo info = iterator.next();
System.out.print(info.getConsumesCondition());
System.out.print(info.getCustomCondition());
System.out.print(info.getHeadersCondition());
System.out.print(info.getMethodsCondition());
System.out.print(info.getParamsCondition());
System.out.print(info.getPatternsCondition());
System.out.print(info.getProducesCondition());
System.out.print("===");
HandlerMethod method = map.get(info);
System.out.print(method.getMethod().getName() + "--");
System.out.print(method.getMethodAnnotation(RequestMapping.class).params()[0]);
System.out.println();
}
return null;
}
@RequestMapping(params="method=hello")
public Object hello() {
return null;
}
public WebApplicationContext getWebApplicationContext(ServletContext sc) {
return WebApplicationContextUtils.getRequiredWebApplicationContext(sc);
}
}
分享到:
相关推荐
在这个特定的"spring IOC反射装载bean"的主题中,我们将深入探讨Spring如何通过XML配置文件来加载和管理Bean,并利用Java的反射机制来实例化这些Bean。 首先,Spring容器通过读取XML配置文件来获取Bean的定义。这些...
在Spring中,泛型常用于容器,如`List<T>`、`Map, V>`等,确保容器内存储的对象类型与预期一致。Spring的`BeanFactory`和`ApplicationContext`接口也使用了泛型,方便用户获取指定类型的bean。 3. 注解: 注解是一...
"深度解析spring容器管理bean"这一主题,旨在深入理解Spring如何通过反射机制、依赖注入(DI)以及XML或Java配置来实现对Bean的生命周期管理。 首先,Spring容器主要有两种类型:DefaultListableBeanFactory和...
在Spring 3.0引入的`@Configuration`类和`@Component`(Spring MVC的`@Controller`、`@Service`、`@Repository`等)注解配合使用时,Bean生命周期的管理变得更加灵活。`@Component`注解的类会自动被Spring扫描并注册...
- 在HandlerMapping的实现类中,例如RequestMappingHandlerMapping,会通过反射机制来查找Controller中带有@RequestMapping注解的方法。 - AbstractHandlerMethodMapping是一个抽象类,提供了映射信息的注册、查找、...
在Spring MVC初始化时,会扫描Spring容器中所有带有@Controller或@RequestMapping注解的类和方法。对于这些类和方法,Spring将它们的@RequestMapping注解值合并,创建RequestMappingInfo对象,存储在handlerMethods...
### Java学习:SSH框架详解与常见问题解析 在深入探讨Java学习过程中遇到的关于SSH(Struts、Spring、Hibernate)框架的问题之前,我们先来理解一下这三个框架的基本概念及其在企业级应用开发中的作用。 #### ...
反射API提供了一组类和接口,如Class、Constructor、Method和Field,它们分别代表类、构造器、方法和字段的元数据。通过这些类,我们可以在运行时获取到类的信息,并可以创建对象、调用方法和访问字段。 1. 获取...
5. **反射API的使用**:在Java中,`java.lang.reflect`包提供了Class、Constructor、Method和Field等类,用于反射操作。例如,`Class.forName()`用于加载类,`Constructor.newInstance()`用于创建对象,`Method....
总的来说,动态生成Java SpringBoot Controller是一项高级技术,涉及到Spring的内部机制和反射调用。它提供了更大的灵活性,但同时也需要对Spring的原理有深入的理解。在实际应用中,应当谨慎使用,避免滥用,因为它...
这意味着`TestRequest`类必须被Spring容器管理,以便Spring能通过反射调用其方法。有以下两种方式让`TestRequest`成为Spring的bean: 1. 使用@Component注解:在`TestRequest`类上添加@Component,Spring会自动扫描...
mybatis实战教程mybatis in action之五与spring3集成附源码 mybatis实战教程mybatis in action之六与Spring MVC 的集成 mybatis实战教程mybatis in action之七实现mybatis分页源码下载 mybatis实战教程mybatis in ...
### Spring Framework概述 #### 1. Spring Framework 版本 Spring 是一个开源的企业级 Java 应用程序框架,由 Rod Johnson 创建,目前由 Pivotal Software 提供支持。Spring 的官方网站是 [https://spring.io/]...
本主题将深入探讨如何在Spring Boot工程中通过自定义response注解、利用Java反射机制、设置自定义拦截器以及实现WebMvcConfigurer接口来实现这一目标。 首先,我们来看自定义response注解。在Spring Boot中,可以...
- **Bean的实例化**:根据`class`属性,Spring会使用反射创建Bean实例。 - **依赖注入**:Spring通过构造函数、setter方法、自动装配(byName或byType)等方式,将其他Bean注入到当前Bean中。 3. **Bean的作用域*...
- **Spring框架和Struts2整合应用**:Spring可以作为Struts2的业务逻辑层,通过Spring管理业务逻辑层的Bean,实现与Struts2的集成。 - **案例:采用SSH结构重构资费管理模块**:使用SSH(Spring + Struts2 + ...
常见的注解类型包括@Override用于标记重写父类方法,@Deprecated用于标记过时的API,以及Spring框架中的@Service、@Repository、@Controller等用于依赖注入。 在Java中,注解分为三种类型:源码保留(Source ...
Struts、Spring、JDK和MySQL是Java Web开发中的四大核心技术,它们各自提供了丰富的API来支持应用程序的构建。下面将分别介绍这些技术的核心API及其重要性。 **Struts API** Struts是Apache软件基金会下的一个开源...