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

  • celebrateubuntu

    celebrateubu

    23 Mayıs 2011
  • LearnKey

    LearnKey

    19 AĞUSTOS 2008
  • mliskIT

    mliskIT

    29 Mart 2012