उदाहरण के लिए अगर मैं एनोटेशन @MyOwnAnnotation
है और, मेरी classpath में इन कक्षाओं में है, ताकि मैं फिल्टर के कुछ प्रकार के साथ संभवतः classpath स्कैन कर सकता है (उदाहरण के। केवल संकुल my.own.app.*
के साथ शुरू स्कैन) और मिल एनोटेशन @MyOwnAnnotation
के साथ सभी कक्षाओं की सूची? मैं इंजेक्शन ढांचे के रूप में गुइस का उपयोग कर रहा हूं और मैं वसंत का उपयोग नहीं करता हूं।कस्टम टिप्पणी के साथ कक्षाओं के लिए classpath स्कैन
14
A
उत्तर
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
आप मक्का-सीपीएस कोशिश कर सकते हैं
उदाहरण:
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 और यह अनुक्रमित एनोटेट कक्षाएं:
आप अन्य पा सकते हैं - बेहतर विकल्प यहाँ: http://stackoverflow.com/questions/259140/scanning-java-annotations-at-runtime या यदि आप 'क्लासपाथ स्कैनिंग पर लटका नहीं है, वैकल्पिक और तेज़ समाधान के लिए नीचे मेरा जवाब देखें। –