1: مقدمة في تعليقات جافا
غالبًا ما تستخدم التعليقات التوضيحية في التطوير ، وأحيانًا أرى التعليقات التوضيحية المخصصة في المشاريع. اليوم ، دعونا نناقش ماهية التعليق التوضيحي ، وكذلك سيناريوهات التطبيق للشرح وكيفية تخصيص التعليق التوضيحي.
يسرد التالية التعليقات التوضيحية المشتركة في التنمية
Override: تستخدم لتحديد أن الطريقة ترث من الطبقة الفائقة. عندما يتم حذف طريقة الفئة الأصل أو تعديلها ، فإن المترجم سوف يطالب برسالة خطأ (يمكنك دائمًا رؤية هذا على طريقة ToString () التي نراها في أغلب الأحيان)
DePrecated: هذا يعني أن هذه الفئة أو الطريقة قد تم إهمالها وانتهي صلاحيتها. إذا كان المستخدم لا يزال يريد استخدامه ، فسيتم إنشاء تحذير من التجميع.
suppressWarnings: رسالة تحذير للمترجم للتجاهل
اختبار Junit: Test
بعض تعليقات الربيع: controller ، requestmapping ، requestparam ، responsebody ، service ، component ، repository ، resource ، autowire
التعليقات التوضيحية للتحقق من Java: notnull ، @email
دعونا نلقي نظرة على الوجه الحقيقي لجبل لو في التعليق التوضيحي. جافا
target (elementType.method) @repinention (attreentering.source) public interface override {} 2: المعرفة الأساسية لشرح جافا
1. نوع بيانات التعليقات التوضيحية Java
تتم كتابة التعليقات التوضيحية في ملفات .java واستخدم interface ككلمة رئيسية ، لذلك فإن التعليقات التوضيحية هي أيضًا نوع بيانات من Java. من تعريف واسع ، فئة ، واجهة ، التعداد ، والشرح كلها أنواع فصول.
2. جافا التعليق التوضيحي
عند إنشاء التعليقات التوضيحية ، تحتاج إلى استخدام بعض التعليقات التوضيحية لوصف التعليقات التوضيحية التي أنشأتها ، أي التعليقات التوضيحية المكتوبة على interface. تسمى هذه التعليقات التوضيحية التعليقات التوضيحية الفوقية ، مثل @target ، @الاحتفاظ ، وما إلى ذلك. فيما يلي بعض التعليقات التوضيحية
documented: يستخدم لتمييز ما إذا كان قد تم تضمين التعليقات التوضيحية عند إنشاء Javadoc. يمكنك أن ترى أن هذا التعليق التوضيحي هو نفسه Override ، والتعليقات التوضيحية فارغة ولا يوجد شيء.
@موثقة@الاستبقاء (attreencepolicy.runtime) target (elementType.annotation_type) public interface موثقة {}@target: تستخدم لتحديد مكان التعليقات التوضيحية. بشكل افتراضي ، يمكن استخدامه في أي مكان ، أو يمكنه تحديد نطاق الاستخدام. في التطوير ، من الأكثر شيوعًا استخدام التعليقات التوضيحية على الفصول (مثل Controller) ، والحقول (مثل autowire) ، والأساليب (مثل requestmapping) ، ومعلمات الأساليب (مثل requestparam) ، إلخ.
النوع: فئة أو واجهة أو إعلان التعداد
الحقل: إعلان المجال (السمة)
الطريقة: إعلان الطريقة
المعلمة: إعلان المعلمة
مُنشئ: إعلان طريقة المنشئ
local_variable: إعلان متغير محلي
anotation_type: إعلان نوع التعليق
الحزمة: بيان الحزمة
Target.Java
@موثقة@الاستبقاء (attreencepolicy.runtime) target (elementType.annotation_type) الهدف public@interface { /** * إرجاع مجموعة من أنواع العناصر التي يمكن تطبيق نوع شرح *. * @إعادة صفيف من أنواع العناصر التي يمكن تطبيق نوع شرح * على */ elementType [] value () ؛} elementType elementType العام { /** ، واجهة (بما في ذلك نوع التعليق التوضيحي) ، أو إعلان التعداد* /type ، /** إعلان الحقل (يتضمن ثوابت التعداد)* /الحقل ، /** إعلان الطريقة* /الطريقة ، /** إعلان المعلمة الرسمي* /المعلمة ، /** إعلان بنيع* /بنية ، /** محلية. إعلان*/ enrotation_type ،/ ** إعلان الحزمة*/ الحزمة ،/ ** اكتب إعلان المعلمة*/ type_parameter ،/ ** استخدام نوع*/ type_use}inherited: يتيح للفئات الفرعية أن ترث التعليقات التوضيحية في الفئة الأصل ، ويمكن أن تحصل على تعليقات التعليقات التوضيحية للفئة الأصل من خلال التفكير.
@موثقة@الاستبقاء (attreentionpolicy.runtime) target (elementType.annotation_type) public interface موروثة {}constraint: يستخدم للتحقق مما إذا كانت قيمة السمة قانونية
@document@target ({elementType.annotation_type})@entry (enthypolicy.runtime) public interface القيد {class <؟ يمتد crosntraintvalidator <؟ ،؟ >> [] التحقق من صحة () ؛}الاحتفاظ: يتم استخدام دورة الإعلان عن التعليقات التوضيحية لتحديد مرحلة البقاء على قيد الحياة من التعليقات التوضيحية. يمكن أن يبقى على مستوى التعليمات البرمجية المصدر ومستوى التجميع (مستوى رمز البايت) ومستوى وقت التشغيل.
المصدر: مستوى التعليمات البرمجية المصدر ، والشروح موجودة فقط في الكود المصدر ، وتستخدم عمومًا للتفاعل مع المترجم ويتم استخدامها للكشف عن الكود. مثل Override ، suppresswarings.
الفئة: مستوى BYTECODE ، وشروحات في رمز المصدر وملفات BYTECODE. يتم استخدامها بشكل أساسي لإنشاء ملفات إضافية أثناء التجميع ، مثل ملفات XML ، وملفات Java ، وما إلى ذلك ، ولكن لا يمكن الحصول عليها أثناء وقت التشغيل. على سبيل المثال ، يقوم MyBatis بإنشاء ملفات كيان ورسم خرائط. في هذا المستوى ، من الضروري إضافة وكيل (Javaagent) عند تحميل JVM ، واستخدام وكيل لتعديل ملف Bytecode ديناميكيًا.
وقت التشغيل: مستوى وقت التشغيل ، وشروط التعليقات التوضيحية في كود المصدر ، و Bytecode ، و Java Virtual Machines. يتم استخدامها بشكل أساسي في وقت التشغيل ، ويمكن استخدام الانعكاس للحصول على المعلومات ذات الصلة.
@موثقة@الاستبقاء (attreentionpolicy.runtime) target (elementType.annotation_type) public interface keking { /*** إرجاع سياسة الاستبقاء. * @رعي سياسة الاستبقاء */ entrentionpolicy value () ؛} 3. محتويات التعليقات التوضيحية Java
في رمز مصدر التعليقات التوضيحية أعلاه ، يمكنك أن ترى أن بعض التعليقات التوضيحية ليس لها محتوى ، وبعض التعليقات التوضيحية لها محتوى ، والذي يبدو أنه طريقة.
تنسيق بناء الجملة للمحتوى المشروح: اسم سمة نوع البيانات () القيمة الافتراضية الافتراضية ، يتم استخدام نوع البيانات لوصف نوع بيانات السمة. تعني القيمة الافتراضية أنه عند عدم تعيين أي سمة ، يتم استخدام القيمة الافتراضية. بشكل عام ، تستخدم String سلسلة فارغة "" كقيمة افتراضية ، وتستخدم المصفوفات عمومًا صفيفًا فارغًا {} كقيمة افتراضية.
دعونا نلقي نظرة على بيان التعليق التوضيحي للطلب في springMVC
Target ({elementType.method ، elementType.type})@entry (enthypolicy.runtime)@document@mappublic@interface requestmapping {String name () default "" ؛ aliasfor ("path") string [] value () default {} ؛ aliasfor ("value") string [] path () default {} ؛ requestMethod [] method () default {} ؛ String [] params () default {} ؛ String [] headers () default {} ؛ سلسلة [] المستهلكين () افتراضي {} ؛ String [] تنتج () افتراضي {} ؛}باستخدام شرح طلب requestmapping في springMVC
requestmapping (value = "/list" ، method = requestMethod.post ، تنتج = {"application/json ؛ charset = utf-8 ؛"}) قائمة السلسلة العامة () {} 4. استخدم سيناريوهات التعليقات التوضيحية
يمكنك تحليل سيناريوهات استخدام التعليقات التوضيحية خلال فترة الإعلان عن التعليقات التوضيحية:
مستوى رمز المصدر: بالنسبة للمجموعات ، مثل Override ، @DePrecated ، وما إلى ذلك ، لا يوجد العديد من السيناريوهات التي يجب على المطورين استخدامها.
الفئة: مستوى Bytecode ، نادراً ما ينظر هذا الجزء
وقت التشغيل: مستوى وقت التشغيل ، هذا هو الأكثر شيوعًا ، وجميع التعليقات التوضيحية التي يستخدمها المطورين هي مستوى وقت التشغيل تقريبًا. يتم استخدام شرح وقت التشغيل بشكل شائع في المواقف التالية
التعليقات التوضيحية دون أي سمات في التعليق التوضيحي. عادةً ما يلعب هذا الجزء من التعليقات التوضيحية دورًا كتعليقات توضيحية ، مثل test ، before ، After. من خلال الحصول على تعليقات العلامات هذه ، تتم بعض المعالجة المنطقية.
يمكنك استخدام التعليق التوضيحي القياسي للتحقق من قيمة السمة ، مثل eMail ، notnull ، إلخ.
يمكنك تكوين بعض المعلمات باستخدام الخصائص في التعليق التوضيحي ، ثم يمكنك استخدام التفكير للحصول على هذه المعلمات. لا تحتوي هذه التعليقات التوضيحية على وظائف خاصة أخرى ، فهي ببساطة تكوين بعض المعلمات بدلاً من تكوين XML. باستخدام التعليقات التوضيحية لتكوين المعلمات ، هذا شائع في Boot Spring ، مثل Configuration
فيما يتعلق بأسلوب التكوين XML مقابل التعليق التوضيحي ، استخدم XML عمومًا لتكوين بعض التكوينات التي ليست قريبة جدًا من علاقة العمل ، واستخدم التعليقات التوضيحية لتكوين بعض المعلمات المرتبطة ارتباطًا وثيقًا بالأعمال.
ثلاثة: جافا التعليقات التوضيحية والانعكاس API الأساسي
// احصل على شرح من نوع معين من الجمهور <a extensed annotation> getAnnotation (class <a> annotationClass) ؛ // احصل على جميع التعليقات التوضيحية (بما في ذلك التعليقات التوضيحية التي تم تعديلها بواسطة الموروث في الطبقة الوالدية) التعليقات التوضيحية العامة [] GetAnnotations () ؛ // احصل على التعليقات التوضيحية التي تم إعلانها (ولكن لا تشمل التعليقات التوضيحية المعدلة من قبل الموروثة في فئة الوالدين) التعليقات التوضيحية العامة [] SecurityException ؛ // الحصول على طريقة معينة طريقة عامة getMethod (اسم السلسلة ، فئة <؟> ... parametertypes) ؛
الرابع: التعليقات التوضيحية المخصصة
استخدم التعليقات التوضيحية المخصصة + اعتراضات أو AOPs للتحكم في الأذونات.
يتم استخدام المثال التالي لتحديد التعليق التوضيحي لتقييد يجب على المستخدم تسجيل الدخول عند الوصول إلى واجهة.
الخطوة 1: تحديد التعليق التوضيحي
يتطلب login.java
@document@target ({elementType.method})@attreence (attreentionpolicy.runtime) public interface يتطلب login {}الخطوة 2: استخدم التعليقات التوضيحية
@controller @requestMapping ("/user") الفئة العامة USERCONTROLLER {REQUIRESLOGIN REQUESTMAPP (value = "/list" ، تنتج = {"application/json ؛ charset = utf-8 ؛"}) السلسلة العامة getUserList () {system.out.println ("---------------------") ؛ إرجاع "[{'id': 1 ، 'username': 'Zhangsan'}]" ؛ }}الخطوة 3: استخدم AOP لاعتراض التعليقات التوضيحية وتحليلها
LoginAdvices الفئة العامة {public void قبل (JoinPoint JoinPoint) يلقي الاستثناء {Object Target = JoinPoint.getTarget () ؛ String methodName = JoinPoint.getSignature (). getName () ؛ System.out.println (Target + "-------" + methodName) ؛ طريقة الطريقة = target.getClass (). getMethod (MethodName) ؛ Boolean annotationpresent = method.isannotationpresent (يتطلب login.class) ؛ if (annotationpresent) {// يجب على المستخدم تسجيل الدخول إلى islogin boolean = false ؛ إذا (! Islogin) {رمي استثناء جديد ("يجب تسجيل الدخول للوصول إلى هذه الواجهة") ؛ } آخر {system.out.println ("login ...") ؛ }}}}تكوين AOP في ApplicationContext.xml
<bean id = "loginAdvices"/> <!-تكوين AOP-> <aOP: التكوين الوكيل-t-arget-class = "true"> <!-القسم-> <aOP: جانب ref = "loginadvices"> <!-> <aop: pointcut id = "pointcut1" expression = "com.mengdee طريقة الإخطار والنقطة-> <aop: قبل method = "قبل" pointcut-ref = "pointcut1"/> </aop: side> </aop: config>
استثناءات مخصصة
لماذا تخصيص الاستثناءات
على الرغم من أن Java توفر مجموعة متنوعة غنية من فصول التعامل مع الاستثناءات ، إلا أن الاستثناءات المخصصة غالبًا ما تستخدم في المشاريع. السبب الرئيسي هو أن فصول الاستثناء التي توفرها Java لا تزال لا تستطيع تلبية احتياجات مختلف الشركات في بعض الحالات. على سبيل المثال ، تتوافق بعض الأخطاء في النظام مع بناء جملة Java ، ولكن لا تتوافق مع منطق العمل. إذا لم يكن الحساب موجودًا عند تسجيل الدخول إلى المستخدم أو تم قفل الحساب ، فيمكنك تخصيص Accountexception استثناء الحساب.
أو في بعض الحالات ، قد يكون سبب نفس الاستثناء في Java أسباب متعددة. ليس من السهل تحديد الأخطاء عند استكشاف الأخطاء وإصلاحها. في هذا الوقت ، يمكنك استخدام تخصيص استثناء أكثر وضوحًا.
فوائد الاستثناءات المخصصة: يمكن أن تجعل الاستثناءات المخصصة استثناءات أكثر وضوحًا وإخفاء الاستثناءات الأساسية ، والتي تكون أكثر أمانًا وأكثر سهولة.
استخدام الاستثناءات المخصصة: يتم توريث الاستثناءات المخصصة بشكل عام من الاستثناء أو RunTimeException. وفقًا لاحتياجات العمل ، يمكن اعتبار بعض السمات كمعلمات للمقدم. تتطلب الاستثناءات المخصصة المبرمجين لرمي الاستثناءات يدويًا والتعامل مع الاستثناءات.
فيما يلي مثال على الاستثناءات المخصصة في Apache Shiro
يمتد SHIROEXCESTION من الطبقة العامة {public shiroexception () {} shiroexception (رسالة سلسلة) {super (message) ؛ } shiroexception العامة (سبب قابل للارتفاع) {super (cause) ؛ } shiroexception العامة (رسالة سلسلة ، سبب قابل للارتفاع) {super (message ، cause) ؛ }}ما سبق هو وصف مفصل لتوضيح جافا والتعليقات التوضيحية المخصصة