掃描指定路徑下的全部請求路徑(基於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;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM