2015-06-12 5 views
5

का उपयोग करके जावस्सिस्ट के साथ सभी कक्षाएं प्राप्त करना मैं जावस्सिस्ट के साथ "com.stackoverflow। *" जैसे पैटर्न का उपयोग करके सभी कक्षाएं कैसे प्राप्त कर सकता हूं?एक पैटर्न

मैं केवल 2 तरीकों पाया:

1/पूर्ण नाम से एक वर्ग का पता लगाएं

CtClass ClassPool.getDefault().getCtClass("com.stackoverflow.user.name") 

2/fullnames साथ कक्षाओं की एक सूची प्राप्त करें:

CtClass[] ClassPool.getDefault().get(String [] arg0) 

उत्तर

3

आप कुछ इस्तेमाल कर सकते हैं लाइब्रेरी जैसे: https://github.com/ronmamo/reflections

मैं पतला नहीं के आप केवल जेआरई कक्षाओं के साथ ऐसा कर सकते हैं। दस्तावेज़ से

उदाहरण:

Reflections reflections = new Reflections("my.project.prefix"); 

Set<Class<? extends SomeType>> subTypes = 
      reflections.getSubTypesOf(SomeType.class); 

Set<Class<?>> annotated = 
      reflections.getTypesAnnotatedWith(SomeAnnotation.class); 
+1

धन्यवाद लेकिन यदि संभव हो तो मैं इसे जावास्क्रिप्ट लाइब्रेरी के साथ करना चाहता हूं – user1335838

3

Michael Laffargue के सुझाव जाना सबसे अच्छा तरीका है। Reflections लाइब्रेरी कवर के तहत javassist का उपयोग करता है। असल में, जावस्त्री वर्ग या जार फ़ाइलों से कच्चे बाइट कोड पढ़ने और कक्षा वर्ग मेटा-डेटा को निकालने के माध्यम से वास्तव में कक्षा लोड किए बिना इसका अर्थ प्रदान करता है, जहां प्रतिबिंब (क्लासपाथ विनिर्देशों के माध्यम से) के आस-पास एक समृद्ध एपीआई प्रदान करता है और सेट को फ़िल्टर करता है कक्षाएं जिन्हें आप ढूंढ रहे हैं।

आप केवल वही काम कर सकते हैं जो जावास्सिस्ट का उपयोग कर खुद ही कर सकते हैं, लेकिन आप प्रतिबिंब पुस्तकालय के कुछ हिस्से को पुनर्निर्माण करेंगे। आप कुछ विचार के स्रोत कोड को देखो सकता है यह कैसे काम करता है देखने के लिए है, लेकिन बहुत आम तौर पर बोल रहा है, यह इस तरह दिखता है:

  1. classpath आप स्कैन करना चाहते हैं। यह आम तौर पर कक्षा फाइलों के पेड़, या जार फ़ाइलों के समूह के साथ निर्देशिकाओं का एक समूह होगा, लेकिन WAR या EARs जैसे अधिक जटिल संरचनाएं भी शामिल कर सकते हैं (जो प्रतिबिंब काफी अच्छी तरह से समर्थन करता है)।

  2. फ़ाइल सिस्टम की रूट जोड़ें जहां क्लास फाइलें रहते हैं, या JAR फ़ाइल आपके क्लासपूल इंस्टेंस के संदर्भ में है।

  3. फ़ाइल सिस्टम पुनरावृत्ति या जारइनपुटस्ट्रीम का उपयोग करके, प्रत्येक वर्ग फ़ाइल या जारेंट्री के माध्यम से पुनरावृत्त करें। आप किसी भी फाइल या प्रविष्टियों को फ़िल्टर कर सकते हैं जो "com/stackoverflow/**। Class" से मेल नहीं खाते हैं
  4. शेष के लिए, फ़ाइल या एंट्री के नाम का उपयोग करके, वर्ग का नाम हटाएं और इसे जावस्सिस्ट क्लास पूल से लोड करें ।
  5. लोड किए गए सीटी क्लास का उपयोग किसी और खोज मानदंड को लागू करने के लिए करें।
  6. अब आपके पास अपनी कक्षा संदर्भ सूची है, कचरा संग्रह के लिए क्लासपूल जारी करें।
संबंधित मुद्दे