Java Scan Classes in Packages...
以前若要掃描隸屬於某些 Package 的 Classes,非常的麻煩。很多人都喜歡用 Spring 來解決這個問題,但可能還是要類似這樣做:
try { for (String p : packages) { String packageSearchPath = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + ClassUtils.convertClassNameToResourcePath(SystemPropertyUtils.resolvePlaceholders(p)) + "/" + CLASS_RESOURCE_PATTERN; Resource[] resources = resourcePatternResolver.getResources(packageSearchPath); for (Resource resource : resources) { if (resource.isReadable()) { MetadataReader metadataReader = this.metadataReaderFactory.getMetadataReader(resource); if (this.annotationFilter.match(metadataReader, metadataReaderFactory)) { persistentClasses.add(Class.forName(metadataReader.getAnnotationMetadata().getClassName())); } } } } } catch (IOException ex) { throw new RuntimeException("I/O failure during classpath scanning", ex); }
今天在「Spring util to scan classpath for annotated classes」這篇文章中,看到有人建議可以用 extcos 來試試看。剛剛看了 extcos 上一些基本介紹的文件後,發現可以這樣寫:
ComponentScanner scanner = new ComponentScanner(); Set<Class<?>> classes = scanner.getClasses(new ComponentQuery() { protected void query() { select().from(“foo”); } });
看起來更簡潔、可讀性更高了!! 有機會一定要好好用一下~~
這篇內容的 Trackback 網址:
http://cdchen.idv.tw/trackback/1077
- cdchen 的 BLOG
- 如果想要發表回應,請先登入 或 註冊。