Runtime Annotation Processing
validation, routing या injection logic लागू करने के लिए reflection से runtime पर annotations पढ़ें।
Runtime Annotation Processing, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
क्लास-स्तरीय एनोटेशन पढ़ना
क्लास पर मौजूद एनोटेशन पाने के लिए Class.getAnnotation() (एक) या getAnnotations() (सभी) का उपयोग करें। एनोटेशन मौजूद न होने पर null लौटता है।
@Service
@RequestMapping("/api")
public class UserController {}
RequestMapping rm = UserController.class.getAnnotation(RequestMapping.class);
if (rm != null) System.out.println(Arrays.toString(rm.value())); // ["/api"]विधि एनोटेशन पढ़ना
विधि के एनोटेशन method.getAnnotation() से प्राप्त करें। किसी क्लास की सभी विधियों को स्कैन करने के लिए getDeclaredMethods() पर इटरेट करें।
for (Method m : UserController.class.getDeclaredMethods()) {
GetMapping gm = m.getAnnotation(GetMapping.class);
if (gm != null) System.out.println(m.getName() + " -> " + Arrays.toString(gm.value()));
}फ़ील्ड एनोटेशन पढ़ना
फ़ील्ड एनोटेशन का उपयोग सत्यापन और ORM फ़्रेमवर्क करते हैं। getDeclaredFields() पर इटरेट करें और हर संबंधित एनोटेशन की जाँच करें।
for (Field f : User.class.getDeclaredFields()) {
Column col = f.getAnnotation(Column.class);
if (col != null) System.out.println(f.getName() + " -> column: " + col.name());
}पैरामीटर एनोटेशन पढ़ना
पैरामीटर एनोटेशन method.getParameterAnnotations() के माध्यम से उपलब्ध होते हैं — यह एक द्वि-आयामी ऐरे है (हर पैरामीटर के लिए एक पंक्ति और हर एनोटेशन के लिए एक प्रविष्टि)।
Method m = UserController.class.getDeclaredMethod("create", UserDto.class);
Annotation[][] pa = m.getParameterAnnotations();
for (Annotation a : pa[0]) System.out.println(a.annotationType().getSimpleName()); // e.g. ValidisAnnotationPresent
एनोटेशन का मान पढ़ने से पहले त्वरित और null-सुरक्षित जाँच के रूप में isAnnotationPresent(AnnotationType.class) का उपयोग करें।
if (m.isAnnotationPresent(Transactional.class)) {
beginTransaction();
m.invoke(target, args);
commitTransaction();
}एक सरल डिपेंडेंसी इंजेक्शन कंटेनर बनाना
@Component से एनोटेट की गई क्लास के लिए पैकेज स्कैन करें, उन्हें रिफ़्लेक्शन के माध्यम से इंस्टैंशिएट करें और उन्हें एक map में रखें — यह Spring कंटेनर का सरलीकृत रूप है।
Map<Class<?>, Object> beans = new HashMap<>();
for (Class<?> cls : scanPackage("com.example")) {
if (cls.isAnnotationPresent(Component.class)) {
beans.put(cls, cls.getDeclaredConstructor().newInstance());
}
}@Inject से एनोटेट किए गए फ़ील्ड में इंजेक्शन करना
बीन्स बनाने के बाद, @Inject से एनोटेट किए गए फ़ील्ड खोजें और रिफ़्लेक्शन के माध्यम से उनमें मान सेट करें — यह फ़ील्ड इंजेक्शन जैसा काम करता है।
for (Object bean : beans.values()) {
for (Field f : bean.getClass().getDeclaredFields()) {
if (f.isAnnotationPresent(Inject.class)) {
f.setAccessible(true);
f.set(bean, beans.get(f.getType()));
}
}
}एनोटेशन मानों से रनटाइम सत्यापन
कंस्ट्रेंट एनोटेशन के मान (जैसे @Range(min=1, max=100)) पढ़ें और रनटाइम पर फ़ील्ड के मान की उनके अनुसार जाँच करें।
for (Field f : dto.getClass().getDeclaredFields()) {
Range range = f.getAnnotation(Range.class);
if (range != null) {
f.setAccessible(true);
int val = (int) f.get(dto);
if (val < range.min() || val > range.max())
throw new ValidationException(f.getName() + " out of range");
}
}पुनरावर्ती एनोटेशन पढ़ना
@Repeatable एनोटेशन के लिए, कंटेनर एनोटेशन से सभी इंस्टेंस पारदर्शी रूप से प्राप्त करने हेतु getAnnotationsByType() का उपयोग करें।
Tag[] tags = MyClass.class.getAnnotationsByType(Tag.class);
for (Tag t : tags) System.out.println(t.value());ClassPath लाइब्रेरी से पैकेज स्कैन करना
मानक Java रिफ़्लेक्शन किसी पैकेज की सभी क्लास की सूची नहीं दे सकता। क्लासपाथ प्रविष्टियों को स्कैन करने के लिए Reflections, ClassGraph या Spring के ClassPathScanningCandidateComponentProvider जैसी लाइब्रेरी का उपयोग करें।
Reflections reflections = new Reflections("com.example.service");
Set<Class<?>> services = reflections.getTypesAnnotatedWith(Service.class);
services.forEach(System.out::println);रनटाइम एनोटेशन प्रोसेसिंग: सारांश
रनटाइम एनोटेशन प्रोसेसिंग डिपेंडेंसी इंजेक्शन, सत्यापन, रूटिंग और ऑब्जेक्ट-रिलेशनल मैपिंग को सक्षम बनाती है। यह आरंभीकरण के समय किया जाने वाला काम है — स्टार्टअप पर एनोटेशन को एक बार प्रोसेस करें, परिणाम कैश करें और हर अनुरोध वाले पथ में रिफ़्लेक्शन से बचें।
त्वरित जाँच
@Repeatable एनोटेशन के सभी इंस्टेंस प्राप्त करने वाली विधि कौन-सी है?
पुनरावृत्ति
एकल एनोटेशन के लिए getAnnotation/isAnnotationPresent का उपयोग करें। getDeclared* से विधियों और फ़ील्ड को स्कैन करें। पुनरावर्ती एनोटेशन के लिए getAnnotationsByType का उपयोग करें। स्टार्टअप पर प्रोसेस करें और परिणाम कैश करें।
एआई शिक्षक के साथ Java सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 104
- पाठ
- 374
अक्सर पूछे जाने वाले प्रश्न
क्या “Runtime Annotation Processing” पाठ निःशुल्क है?
हाँ—“Runtime Annotation Processing” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“Runtime Annotation Processing” में मैं क्या सीखूँगा?
validation, routing या injection logic लागू करने के लिए reflection से runtime पर annotations पढ़ें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“Runtime Annotation Processing” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Annotations परिभाषित करना: Elements और Defaults
- Retention Policies और Target Types
- Runtime Annotation Processing
- Compile-Time Annotation Processors