2011-09-06 5 views
14

उदाहरण के लिए अगर मैं एनोटेशन @MyOwnAnnotation है और, मेरी classpath में इन कक्षाओं में है, ताकि मैं फिल्टर के कुछ प्रकार के साथ संभवतः classpath स्कैन कर सकता है (उदाहरण के। केवल संकुल my.own.app.* के साथ शुरू स्कैन) और मिल एनोटेशन @MyOwnAnnotation के साथ सभी कक्षाओं की सूची? मैं इंजेक्शन ढांचे के रूप में गुइस का उपयोग कर रहा हूं और मैं वसंत का उपयोग नहीं करता हूं।कस्टम टिप्पणी के साथ कक्षाओं के लिए classpath स्कैन

उत्तर

12

हां, Scannotation लाइब्रेरी देखें।

इसके अलावा, निम्न ब्लॉग पोस्ट को देखें documents use of Scannotation

बुनियादी उदाहरण:

URL[] urls = ClasspathUrlFinder.findClassPaths(); // scan java.class.path 
AnnotationDB db = new AnnotationDB(); 
db.scanArchives(urls); 
Set<String> entityClasses = 
    db.getAnnotationIndex().get(MyOwnAnnotation.class.getName()); 

आपका एनोटेशन इतना है कि वे रनटाइम पर .class फ़ाइल में उपलब्ध हैं 'क्रम' प्रतिधारण की आवश्यकता होगी।

+0

आप अन्य पा सकते हैं - बेहतर विकल्प यहाँ: http://stackoverflow.com/questions/259140/scanning-java-annotations-at-runtime या यदि आप 'क्लासपाथ स्कैनिंग पर लटका नहीं है, वैकल्पिक और तेज़ समाधान के लिए नीचे मेरा जवाब देखें। –

0

आप मक्का-सीपीएस कोशिश कर सकते हैं

उदाहरण:

List<Class<?>> classes = CPScanner.scanClasses(new PackageNameFilter("net.sf.corn.cps.*"),new ClassFilter().appendAnnotation(SampleAnnotation.class)); 

नीचे निर्भरता डाल अपने pom.xml में

<dependency> 
    <groupId>net.sf.corn</groupId> 
    <artifactId>corn-cps</artifactId> 
    <version>1.0.1</version> 
</dependency> 
1

तुम मेरे पुस्तकालय FastClasspathScanner की कोशिश कर सकते:

List<String> classNames = new FastClassPathScanner("my.own.app") 
    .scan() 
    .getNamesOfClassesWithAnnotation(MyOwnAnnotation.class); 
0

मैं वास्तव में अन्य सभी की तुलना में एक और दृष्टिकोण की सिफारिश करता हूं (क्योंकि वे सभी क्लासपाथ स्कैनिंग का उपयोग करते हैं, जो धीमा है)। यह कहा जाता है ClassIndex और यह अनुक्रमित एनोटेट कक्षाएं:

https://github.com/atteo/classindex

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

  • कोई संबंधित समस्या नहीं^_^