package test;
import java.io.IOException;
import java.util.LinkedHashSet;
import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.BeanDefinitionStoreException;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
import org.springframework.core.type.classreading.MetadataReader;
import org.springframework.core.type.classreading.MetadataReaderFactory;
import org.springframework.util.ClassUtils;
public class FindTargetPackageClass {
private static Log logger = LogFactory.getLog(FindTargetPackageClass.class);
protected static final String DEFAULT_RESOURCE_PATTERN = "**/*.class";
private ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
private MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(
this.resourcePatternResolver);
private String resourcePattern = DEFAULT_RESOURCE_PATTERN;
public static void main(String[] args) throws Exception {
FindTargetPackageClass test = new FindTargetPackageClass();
System.out.println(test.findTargetClassNames("org.springframework.context.event"));
}
public Set<String> findTargetClassNames(String basePackage) {
Set<String> candidates = new LinkedHashSet<String>();
try {
String packageSearchPath = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
+ ClassUtils.convertClassNameToResourcePath(basePackage)
+ "/" + this.resourcePattern;
Resource[] resources = this.resourcePatternResolver
.getResources(packageSearchPath);
for (int i = 0; i < resources.length; i++) {
Resource resource = resources[i];
MetadataReader metadataReader = this.metadataReaderFactory
.getMetadataReader(resource);
String clazzName = metadataReader.getClassMetadata().getClassName();
candidates
.add(clazzName);
logger.debug("Find Class " + clazzName);
}
} catch (IOException ex) {
throw new BeanDefinitionStoreException(
"I/O failure during classpath scanning", ex);
}
return candidates;
}
}
分享到:
相关推荐
当我们需要调用一个不在我们应用范围内的程序时,我们需要知道目标应用的包名(Package Name)和主类名(Activity Class Name)。下面将详细介绍如何进行操作。 1. **理解包名(Package Name)** 包名是Android...
- `packageName/*.class`:指定要打包的.class文件路径,这里我们指定的是包名下的所有.class文件。 这样,我们就创建了一个可执行的JAR文件。当你双击这个JAR文件时,Java虚拟机会根据`MANIFEST.MF`中的`Main-...
这里的`codebase`属性指定了项目的根目录以及`applet`子目录,这样浏览器就能找到包内的`AppletUse.class`。 另外,还有两种常见的解决方案: - **例1**:使用绝对路径,将`codebase`设置为项目名下的`appletclass...
例如,`$("#id")` 用于选取 ID 为 "id" 的元素,`$(".class")` 用于选取所有 class 为 "class" 的元素。 2. **DOM 操作**: jQuery 提供了简便的方法来操作 DOM 元素,包括添加、删除、修改元素属性等。例如,`$("p...
这是因为Struts配置文件通常会引用包名下的资源文件而不需要包含`.properties`扩展名。 ##### 7. 在Struts1.2中,StrutsModule是在什么地方配置的? - **答案**:【B】在struts-config.xml中 - **解析**:在Struts...
1. **选择器**:如类选择器(.class)、ID选择器(#id)、元素选择器(tag name)等,用于指定要应用样式的元素。 2. **属性**:如color、font-size、background-color等,定义元素的样式。 3. **盒模型**:理解...