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

  • David Wills

    David Wills

    31 Aralık 2007
  • hotstrikegently

    hotstrikegen

    26 AĞUSTOS 2011
  • Muse

    Muse

    28 EYLÜL 2006