扫描指定路径下的全部请求路径(基于SpringMVC)

通过上面两篇博客,我们能够得到指定类上的全部请求路径。现在需要的是,给定一个指定的路径,获取全部的请求路径。

public class RequestUrlScannerHelper {

    /**
     * 以下三个参数通过IOC注入进来
     */
    private String basePackage;                  //扫描的基础包
    private ResourcePatternResolver resolver;    //解析器

    private TypeFilter controlFilter = new AnnotationTypeFilter(Controller.class, false);
    private String pattern;
    private Set<Class<?>> matchControlerClass = new HashSet<Class<?>>();

    /**
     * 根据basePackage得到全部的class文件,并进行匹配,将满足条件的class存储与set集合中。
     * @throws IOException
     * @throws ClassNotFoundException
     */
    @PostConstruct
    public void init() throws IOException, ClassNotFoundException {
        pattern = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + ClassUtils.convertClassNameToResourcePath(basePackage) + "/**/*.class";

        Resource[] resources = resolver.getResources(pattern);
        MetadataReaderFactory factory = new CachingMetadataReaderFactory(resolver);
        for(Resource resource : resources) {
            if(resource.isReadable()) {
                MetadataReader reader = factory.getMetadataReader(resource);

                if(controlFilter.match(reader, factory)) {
                    matchControlerClass.add(Class.forName(reader.getClassMetadata().getClassName()));
                }
            }
        }
    }

    public String getBasePackage() {
        return basePackage;
    }

    public void setBasePackage(String basePackage) {
        this.basePackage = basePackage;
    }

    public ResourcePatternResolver getResolver() {
        return resolver;
    }

    public void setResolver(ResourcePatternResolver resolver) {
        this.resolver = resolver;
    }

    /**
     *
     * @return 指定包下的全部请求信息。
     * @throws NoSuchMethodException
     * @throws SecurityException
     * @throws IllegalAccessException
     * @throws IllegalArgumentException
     * @throws InvocationTargetException
     */
    public List<RequestUrlInfo> getAllRequestUrl() throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        List<RequestUrlInfo> infos = new ArrayList<RequestUrlInfo>();

        for(Class<?> scannerClass : matchControlerClass) {
            infos.addAll(RequestUrlHelper.getInstance().getAllRequestUrlInfos(scannerClass));
        }

        return infos;
    }
}
时间: 2024-08-27 23:58:10

扫描指定路径下的全部请求路径(基于SpringMVC)的相关文章

Python扫描指定目录下(包括子目录)的文件

扫描指定目录下的文件,或者匹配指定后缀和前缀的函数. 如果要扫描指定目录下的文件,包括子目录,调用scan_files("/export/home/test/") 如果要扫描指定目录下的特定后缀的文件(比如jar包),包括子目录,调用scan_files("/export/home/test/", postfix=".jar") 如果要扫描指定目录下的特定前缀的文件(比如test_xxx.py),包括子目录,调用scan_files("

Java如何扫描指定package下所有的类

在写一个MVC框架,需要从包中扫描出组件并注册到容器中,而JDK没有提供现成的从方法,只能自己实现. 功能: 给定一个包名,编程得到该包(和其所有子包)下所有的类文件.如,输入包名com.myapp.util, 输出该包下类的全限定名com.myapp.util.StringUtils, com.app.util.ImageUtils等. 思路: 有的web server在部署运行时会解压jar包,因此class文件会在普通的文件目录下.如果web server不解压jar包,则class文件会

扫描指定目录下所有图片文件

String myparent=newPath.substring(0, newPath.lastIndexOf("/")).substring(newPath.substring(0, newPath.lastIndexOf("/")).lastIndexOf("/")+1); Uri mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; ContentResolver mConte

Tomcat下ajax请求路径总结

ajax的url有两种,一种是绝对路径,另一种是相对路径. 一.绝对路径:包括协议名称.主机地址.端口.web项目名称等的完整请求路径. 例如: $.ajax({ url:"http://localhost:8080/webname/test" }); 好处:比如在webA项目中的ajax需要请求webB项目中的服务,则必须使用绝对路径. 坏处:使用绝对路径要求古地理更web项目的名称,如果webB项目重命名了,则对应的ajax请求都需要修改. 二.相对路径:不需要协议名.主机地址.端

Java扫描指定文件路径下的文件并且递归扫描其子目录下的所有文件

本文主要实现了扫描指定文件路径下的文件,递归扫描其子目录下的所有文件信息,示例文件为: 要求将后缀为.dat的文件夹信息也写入到数据库中,然后将.chk文件解析,将文件中对应的内容读出来写入到数据库,对应类为ChkFileParseFactroy,本文文件发现代码为: 1 package com.src.service.impl; 2 3 import java.io.File; 4 import java.net.InetAddress; 5 import java.net.NetworkIn

Java扫描classpath指定包路径下所有class

在写框架时 经常需要扫描classpath指定包路径下带有某个Annotation的类,自己整理了一下 封装成一个工具类了,供大家参考. 源代码ClassPathResourceScanner.java 如下: package com.bytebeats.jupiter.ioc; import com.bytebeats.jupiter.util.ClassHelper;import org.slf4j.Logger;import org.slf4j.LoggerFactory; import

Android -- 采用系统相册浏览指定路径下照片

//打开系统相册 Intent intent=new Intent(Intent.ACTION_GET_CONTENT); intent.setType("image/*"); startActivity(intent); //打开指定的一张照片 Intent intent = new Intent(); intent.setAction(android.content.Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(pi

unity3d 依据指定的Assets下的目录路径 返回这个路径下的全部文件名称

using UnityEngine; using System.Collections; using System.Collections.Generic; using System.IO; <pre class="csharp" name="code"> public static List<string> nameArray = new List<string>(); /// <summary> /// 依据指定的

访问指定路径下的目录以及文件

#include "stdafx.h" //vs2010下运行通过 #undef UNICODE #include <stdio.h> #include <stdlib.h> #include <Windows.h> #include <iostream> using namespace std; void browseFile(char* path) { char pattern[FILENAME_MAX + 1]; sprintf(p