SORU
21 EYLÜL 2009, PAZARTESİ


Nasıl bir sınıf içinde bir Java paketi tüm sınıflar okuyabilirim?

Sınıfları Java paketinde okumak istiyorum. Bu sınıf, sınıf. Java program bu görev doğrudan yapmak istiyorum. Yapmak için basit bir yol biliyor musunuz?

List<Class> classes = readClassesFrom("my.package")

CEVAP
17 Mart 2011, PERŞEMBE


Eğer sınıf Spring varsa aşağıdakileri yap.

XmlRootElement ile açıklamalı bir paket: tüm sınıflar bulabilirsiniz

private List<Class> findMyTypes(String basePackage) throws IOException, ClassNotFoundException
{
    ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
    MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resourcePatternResolver);

    List<Class> candidates = new ArrayList<Class>();
    String packageSearchPath = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX  
                               resolveBasePackage(basePackage)   "/"   "**/*.class";
    Resource[] resources = resourcePatternResolver.getResources(packageSearchPath);
    for (Resource resource : resources) {
        if (resource.isReadable()) {
            MetadataReader metadataReader = metadataReaderFactory.getMetadataReader(resource);
            if (isCandidate(metadataReader)) {
                candidates.add(Class.forName(metadataReader.getClassMetadata().getClassName()));
            }
        }
    }
    return candidates;
}

private String resolveBasePackage(String basePackage) {
    return ClassUtils.convertClassNameToResourcePath(SystemPropertyUtils.resolvePlaceholders(basePackage));
}

private boolean isCandidate(MetadataReader metadataReader) throws ClassNotFoundException
{
    try {
        Class c = Class.forName(metadataReader.getClassMetadata().getClassName());
        if (c.getAnnotation(XmlRootElement.class) != null) {
            return true;
        }
    }
    catch(Throwable e){
    }
    return false;
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • circuschina

    circuschina

    16 Mart 2007
  • parlophone

    parlophone

    28 ŞUBAT 2006
  • TimMinchinLive

    TimMinchinLi

    23 ŞUBAT 2009