1. คำอธิบายประกอบแบบกำหนดเองและฤดูใบไม้ผลิของ Java
คำอธิบายประกอบ Java เป็นข้อมูลข้อมูลเมตาขององค์ประกอบโปรแกรม (คลาสตัวแปรสมาชิกวิธีการสมาชิก ฯลฯ ) ไม่มีผลกระทบต่อการดำเนินการของโปรแกรมเอง ผ่านคำอธิบายประกอบที่กำหนดเองคุณสามารถเพิ่มการประกาศพิเศษให้กับองค์ประกอบของโปรแกรม
ในฐานะแพลตฟอร์มสำหรับการสร้างแอปพลิเคชันระดับองค์กรสปริงมีฟังก์ชั่นที่หลากหลาย การรวมคำอธิบายประกอบที่กำหนดเองของ Java เข้ากับ Spring เพื่อใช้การแยกวิเคราะห์และการประมวลผลคำอธิบายประกอบในสถานการณ์เฉพาะสามารถลดระดับการเชื่อมต่อของแอปพลิเคชันและปรับปรุงความสามารถในการปรับขนาดของโปรแกรม
2. สถานการณ์แอปพลิเคชัน
ต่อไปนี้สรุปสถานการณ์แอปพลิเคชันหลายอย่างและอธิบายแนวคิดทั่วไปเท่านั้น (PS: ไม่ใช่ทุกสถานการณ์ที่ได้รับการฝึกฝนในโครงการ)
2.1 เข้าสู่ระบบการปิดกั้นการอนุญาต
ในโครงการเว็บการสกัดกั้นเข้าสู่ระบบและการสกัดกั้นการอนุญาตเป็นฟังก์ชั่นความคิดโบราณ ผ่านคำอธิบายประกอบการเข้าสู่ระบบที่กำหนดเองหรือคำอธิบายประกอบการอนุญาตให้ใช้คำอธิบายประกอบการแยกวิเคราะห์ในการสกัดกั้นที่กำหนดเองเพื่อรับรู้ฟังก์ชั่นการเข้าสู่ระบบและการสกัดกั้นการอนุญาต
วิธีการใช้งานนี้มีการกำหนดค่าอย่างง่ายความยืดหยุ่นสูงและการมีเพศสัมพันธ์ต่ำ
2.2 การจัดการงานเวลา
ในระหว่างกระบวนการก่อสร้างระบบจะมีข้อกำหนดที่กำหนดเวลาต่าง ๆ และการจัดการส่วนกลางของงานที่กำหนดเวลาสามารถรักษาการทำงานของระบบได้อย่างมีประสิทธิภาพมากขึ้น
คำอธิบายประกอบงานเวลาที่กำหนดเองในบทที่ซ้ำซ้อนของเอกสารคำอธิบายประกอบ Java อย่างเป็นทางการสามารถตระหนักถึงการประกาศงานเวลาของวิธีการทางธุรกิจ เมื่อรวมกับ Postprocessor Postprocessor ของ Spring BeanPostProcessor (PS: Postprocessor ของ Spring Container จะถูกกล่าวถึงในบทความถัดไป) การแยกวิเคราะห์คำอธิบายประกอบที่กำหนดเอง ข้อมูลคำอธิบายประกอบที่แยกวิเคราะห์จะถูกใช้เพื่อสร้างงานเวลารันไทม์โดยใช้ quartzapi ซึ่งสามารถทำให้การสร้างรันไทม์และการจัดการส่วนกลางของงานเวลา
วิธีนี้สามารถหลีกเลี่ยงการกำหนดการกำหนดค่าของงานเวลาควอตซ์และปรับปรุงความสามารถในการปรับขนาดของระบบ
2.3 ข้อมูลจำเพาะแหล่งข้อมูลสำหรับการกำหนดเส้นทางแหล่งข้อมูลหลายข้อมูล
AbstractroutingDataSource จัดทำโดยสปริงใช้การกำหนดเส้นทางแบบไดนามิกของแหล่งข้อมูลหลายแหล่งและสามารถนำไปใช้ภายใต้สถาปัตยกรรมการแยกสแลฟหลัก โดยการระบุแหล่งข้อมูลที่แตกต่างกันสำหรับวิธีการที่แตกต่างกันการกำหนดเส้นทางแบบไดนามิกของแหล่งข้อมูลจะได้รับการรับรู้ (ตัวอย่างเช่น: วิธีการอ่านไปจากแหล่งข้อมูลฐานข้อมูลทาสวิธีการเขียนไปจากแหล่งข้อมูลฐานข้อมูลหลัก) วิธีระบุประเภทแหล่งข้อมูลที่สอดคล้องกับวิธีการต่าง ๆ สามารถนำไปใช้งานได้โดยใช้คำอธิบายประกอบที่กำหนดเอง ฟังก์ชั่นการกำหนดเส้นทางของแหล่งข้อมูลจะรับรู้โดยการวิเคราะห์ประเภทแหล่งข้อมูลที่เกี่ยวข้องที่ประกาศไว้ในวิธีการ
วิธีนี้หลีกเลี่ยงการแยกวิเคราะห์การจับคู่รูปแบบของวิธีการ (ตัวอย่างเช่น: เริ่มต้นด้วยการเลือกเริ่มต้นด้วยการอัปเดต ฯลฯ ) และการประกาศมีความยืดหยุ่นมากขึ้น
คำอธิบายประกอบที่กำหนดเอง
มาดูตัวอย่างที่ง่ายที่สุด ในกระบวนการใช้แอปพลิเคชัน SpringWeb เราใช้ @Controller, @Service, @Repository และคำอธิบายประกอบอื่น ๆ เพื่อกำหนด Javabeans แล้วคุณจะกำหนดคำอธิบายประกอบด้วยตัวเองได้อย่างไร? สปริงสามารถโหลดได้โดยอัตโนมัติ ดังนั้นจึงมีตัวอย่างแรก
@Target ({ElementType.type})@retention (RetentionPolicy.runtime)@documented@ComponentPublic @Interface myComponent {ค่าสตริง () ค่าเริ่มต้น "";} @ConfigurationPublic คลาสคอมโพเนนต์ AnnotationTest {โมฆะสาธารณะคงที่หลัก (สตริง [] args) {AnnotationConfigapplicationContext AnnotationConfigapplicationContext = นิวเคลียสใหม่ AnnotationConfigapplicationContext.refresh (); injectClass injectClass = AnnotationConfigapplicationContext.getBean (injectClass.class); injectclass.print (); } @mycomponent คลาสสาธารณะ injectClass {public void print () {system.out.println ("Hello World"); -เรียกใช้ตัวอย่างนี้และคุณจะพบว่าชั้นเรียนที่มีคำอธิบายประกอบโดย @mycomponent นั้นถูกโหลดในฤดูใบไม้ผลิและสามารถใช้ตามปกติเป็น javabean ธรรมดา การตรวจสอบซอร์สโค้ดของสปริงคุณจะพบว่าฤดูใบไม้ผลิใช้ classpathscanningcandidateComponentProvider เพื่อสแกนแพ็คเกจ คลาสนี้มีคำอธิบายประกอบดังกล่าว
ผู้ให้บริการส่วนประกอบที่สแกน ClassPath จากแพ็คเกจพื้นฐาน จากนั้นจะใช้ไม่รวมและรวมตัวกรองไปยังคลาสผลลัพธ์เพื่อค้นหาผู้สมัคร
เมธอด registerDefaultFilters ของคลาสนี้มีรหัสหลายบรรทัด
ได้รับการป้องกันโมฆะ registerDefaultFilters () {this.includefilters.add (หมาย AnnotationTypefilter ใหม่ (component.class)); classloader cl = classpathscanningcandidateComponentProvider.class.getClassLoader (); ลอง {this.includefilters.add (นิวเคลียสใหม่ Tepefilter (((คลาส <? ขยายคำอธิบายประกอบ>) classutils.forname ("javax.annotation.ManagedBean", cl)), false)); logger.debug ("JSR-250 'javax.annotation.ManagedBean' พบและรองรับการสแกนส่วนประกอบ"); } catch (classnotfoundexception ex) {// jsr -250 1.1 API (รวมอยู่ใน Java EE 6) ไม่สามารถใช้ได้ - เพียงแค่ข้าม } ลอง {this.includefilters.add (คำอธิบายประกอบใหม่ stefefilter (((คลาส <? ขยายคำอธิบายประกอบ>) classutils.forname ("javax.inject.named", cl)), false)); logger.debug ("JSR-330 'javax.inject.named' คำอธิบายประกอบ 'พบและสนับสนุนการสแกนส่วนประกอบ"); } catch (classnotfoundexception ex) {// jsr -330 API ไม่พร้อมใช้งาน - เพียงแค่ข้าม -ที่นี่คุณจะพบว่าการใช้ข้อมูลชั้นเรียนสแกนของฤดูใบไม้ผลิจะตัดสินเฉพาะชั้นเรียนที่มีคำอธิบายประกอบโดย @component ดังนั้นคำอธิบายประกอบที่กำหนดเองใด ๆ สามารถสแกนได้โดยฤดูใบไม้ผลิและฉีดเข้าไปในภาชนะตราบเท่าที่มันติดตั้ง @component (แน่นอนจะต้องมีค่าสตริง () ค่าเริ่มต้น ""
สรุป
ข้างต้นเป็นเรื่องเกี่ยวกับการอภิปรายสั้น ๆ ของบทความนี้เกี่ยวกับการประยุกต์ใช้คำอธิบายประกอบที่กำหนดเองในฤดูใบไม้ผลิฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!