2013-10-25 5 views
8

मैं वर्तमान में classes फ़ील्ड ClassLoader में सभी लोड किए गए वर्गों को प्राप्त करने के लिए प्रतिबिंब का उपयोग कर रहा हूं और फिर getPackage उस पैकेज के बराबर है जो मैं खोज रहा हूं। मुझे एक समस्या यह है कि कक्षाएं ClassLoader द्वारा लोड नहीं हो रही हैं, लेकिन मेरे पास Class.forName का उपयोग करके उन्हें लोड करने का कोई तरीका नहीं है क्योंकि मुझे कक्षाओं का नाम पता नहीं चलेगा क्योंकि वे गतिशील रूप से लोड होते हैं और हमेशा बदलते हैं । कक्षाओं में सभी बातों में एक बात यह है कि वे Module का विस्तार करते हैं। पैकेज से सभी वर्गों को लोड करने के बारे में मैं कैसे जाउंगा?पैकेज में प्रत्येक वर्ग को लोड करना

अग्रिम धन्यवाद।

+0

http://stackoverflow.com/questions/520328/can-you-find-all-classes-in-a-package-using-reflection इस – iluxa

+0

@iluxa का उत्तर देने लगता है मैं पैकेज में सभी कक्षाएं प्राप्त कर सकता हूं , लेकिन केवल तभी लोड किया गया है जब वे –

+1

समझाए गए [यहां] (http://stackoverflow.com/questions/520328/can-you-find-all-classes-in-a-package-using-reflection/520344#520344) – mithrandir

उत्तर

0

reflections API का उपयोग करके यह सुनिश्चित करने के लिए काम करता है। यदि ऐसा नहीं होता है तो आप इसे गलत तरीके से सेट कर सकते हैं। मैंने अभी इस उदाहरण को बनाया है और यह किसी भी क्लासलोडर से स्वतंत्र रूप से पैकेज में सभी कक्षाओं को प्रिंट करता है।

package com.test; 

import java.util.Arrays; 
import java.util.Iterator; 
import java.util.Set; 

import org.reflections.Reflections; 
import org.reflections.scanners.FieldAnnotationsScanner; 
import org.reflections.scanners.MemberUsageScanner; 
import org.reflections.scanners.MethodAnnotationsScanner; 
import org.reflections.scanners.MethodParameterNamesScanner; 
import org.reflections.scanners.MethodParameterScanner; 
import org.reflections.scanners.SubTypesScanner; 
import org.reflections.scanners.TypeAnnotationsScanner; 
import org.reflections.util.ClasspathHelper; 
import org.reflections.util.ConfigurationBuilder; 
import org.reflections.util.FilterBuilder; 

public class Runner { 

    public static void main(String[] args) { 
     Reflections reflections = new Reflections(); 
     FilterBuilder TestModelFilter = new FilterBuilder().include("com.test.*"); 

     reflections = new Reflections(new ConfigurationBuilder() 
       .setUrls(Arrays.asList(ClasspathHelper.forClass(Runner.class))).filterInputsBy(TestModelFilter) 
       .setScanners(new SubTypesScanner(false), new TypeAnnotationsScanner(), new FieldAnnotationsScanner(), 
         new MethodAnnotationsScanner(), new MethodParameterScanner(), new MethodParameterNamesScanner(), 
         new MemberUsageScanner())); 

     Set<Class<? extends Object>> allClasses = reflections.getSubTypesOf(Object.class); 
     System.out.println(allClasses); 
     for (Iterator it = allClasses.iterator(); it.hasNext();) { 
      Class<? extends Object> clazz = (Class<? extends Object>) it.next(); 
      System.out.println(clazz.getCanonicalName()); 
     } 
    } 

} 

मैंने इरादे से सभी आयात जोड़े, ताकि आप देख सकें कि यह कौन सी एपीआई उपयोग करता है। क्या यह आपके लिए काम करता है?

संबंधित मुद्दे