`
FirstBlood
  • 浏览: 162120 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

Spring 反射得到所有controller与method

阅读更多
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);
	}
}
0
0
分享到:
评论
3 楼 LinApex 2013-05-11  
FirstBlood 写道
做权限的时候可以用到,不然手动添加到数据库难免有填错的。
做权限的话,根据用户组的类型去缓存或者数据库中查询即可,需要加载所有的路径么.
2 楼 FirstBlood 2013-05-10  
做权限的时候可以用到,不然手动添加到数据库难免有填错的。
1 楼 LinApex 2013-05-09  
明白了,得到这个有莫子用类?

相关推荐

    spring IOC反射装载bean

    在这个特定的"spring IOC反射装载bean"的主题中,我们将深入探讨Spring如何通过XML配置文件来加载和管理Bean,并利用Java的反射机制来实例化这些Bean。 首先,Spring容器通过读取XML配置文件来获取Bean的定义。这些...

    Java反射、泛型和注解实战之Spring核心注入IOC的实现

    在Spring中,泛型常用于容器,如`List&lt;T&gt;`、`Map, V&gt;`等,确保容器内存储的对象类型与预期一致。Spring的`BeanFactory`和`ApplicationContext`接口也使用了泛型,方便用户获取指定类型的bean。 3. 注解: 注解是一...

    深度解析spring容器管理bean

    "深度解析spring容器管理bean"这一主题,旨在深入理解Spring如何通过反射机制、依赖注入(DI)以及XML或Java配置来实现对Bean的生命周期管理。 首先,Spring容器主要有两种类型:DefaultListableBeanFactory和...

    spring bean life cycle

    在Spring 3.0引入的`@Configuration`类和`@Component`(Spring MVC的`@Controller`、`@Service`、`@Repository`等)注解配合使用时,Bean生命周期的管理变得更加灵活。`@Component`注解的类会自动被Spring扫描并注册...

    spring-mvc 程序结构以及调用流程

    - 在HandlerMapping的实现类中,例如RequestMappingHandlerMapping,会通过反射机制来查找Controller中带有@RequestMapping注解的方法。 - AbstractHandlerMethodMapping是一个抽象类,提供了映射信息的注册、查找、...

    Spring源码学习十:DispatcherServlet请求分发源码分析1

    在Spring MVC初始化时,会扫描Spring容器中所有带有@Controller或@RequestMapping注解的类和方法。对于这些类和方法,Spring将它们的@RequestMapping注解值合并,创建RequestMappingInfo对象,存储在handlerMethods...

    java学习(ssh) action structs spring hibernet

    ### Java学习:SSH框架详解与常见问题解析 在深入探讨Java学习过程中遇到的关于SSH(Struts、Spring、Hibernate)框架的问题之前,我们先来理解一下这三个框架的基本概念及其在企业级应用开发中的作用。 #### ...

    Java类的反射与动态加载

    反射API提供了一组类和接口,如Class、Constructor、Method和Field,它们分别代表类、构造器、方法和字段的元数据。通过这些类,我们可以在运行时获取到类的信息,并可以创建对象、调用方法和访问字段。 1. 获取...

    Java IOC及反射api代码参考实例

    5. **反射API的使用**:在Java中,`java.lang.reflect`包提供了Class、Constructor、Method和Field等类,用于反射操作。例如,`Class.forName()`用于加载类,`Constructor.newInstance()`用于创建对象,`Method....

    动态生成Java springboot controller.docx

    总的来说,动态生成Java SpringBoot Controller是一项高级技术,涉及到Spring的内部机制和反射调用。它提供了更大的灵活性,但同时也需要对Spring的原理有深入的理解。在实际应用中,应当谨慎使用,避免滥用,因为它...

    动态生成Java springboot controller (2).pdf

    这意味着`TestRequest`类必须被Spring容器管理,以便Spring能通过反射调用其方法。有以下两种方式让`TestRequest`成为Spring的bean: 1. 使用@Component注解:在`TestRequest`类上添加@Component,Spring会自动扫描...

    springmybatis

    mybatis实战教程mybatis in action之五与spring3集成附源码 mybatis实战教程mybatis in action之六与Spring MVC 的集成 mybatis实战教程mybatis in action之七实现mybatis分页源码下载 mybatis实战教程mybatis in ...

    tedu二阶段Spring课堂随手

    ### Spring Framework概述 #### 1. Spring Framework 版本 Spring 是一个开源的企业级 Java 应用程序框架,由 Rod Johnson 创建,目前由 Pivotal Software 提供支持。Spring 的官方网站是 [https://spring.io/]...

    springboot工程自定义response注解、自定义规范化返回数据结构

    本主题将深入探讨如何在Spring Boot工程中通过自定义response注解、利用Java反射机制、设置自定义拦截器以及实现WebMvcConfigurer接口来实现这一目标。 首先,我们来看自定义response注解。在Spring Boot中,可以...

    spring bean加载

    - **Bean的实例化**:根据`class`属性,Spring会使用反射创建Bean实例。 - **依赖注入**:Spring通过构造函数、setter方法、自动装配(byName或byType)等方式,将其他Bean注入到当前Bean中。 3. **Bean的作用域*...

    spring框架学习

    - **Spring框架和Struts2整合应用**:Spring可以作为Struts2的业务逻辑层,通过Spring管理业务逻辑层的Bean,实现与Struts2的集成。 - **案例:采用SSH结构重构资费管理模块**:使用SSH(Spring + Struts2 + ...

    (02)2020.4.26 Java高级语言特性,注解与反射---lance老师.rar

    常见的注解类型包括@Override用于标记重写父类方法,@Deprecated用于标记过时的API,以及Spring框架中的@Service、@Repository、@Controller等用于依赖注入。 在Java中,注解分为三种类型:源码保留(Source ...

    Struts-Spring-JDK-MySql-的API

    Struts、Spring、JDK和MySQL是Java Web开发中的四大核心技术,它们各自提供了丰富的API来支持应用程序的构建。下面将分别介绍这些技术的核心API及其重要性。 **Struts API** Struts是Apache软件基金会下的一个开源...

Global site tag (gtag.js) - Google Analytics