ComponentScan ทำงานอย่างไร

@ComponentScan จะแสดงรายการคลาสทั้งหมดที่มีคำอธิบายประกอบ @Component ในแพ็คเกจ (หรือ @Service/@Repository) ในการทำเช่นนี้ ฉันคิดว่าพวกเขาใช้การสะท้อนกลับเพื่อแจกแจงคลาสทั้งหมดในแพ็คเกจและค้นหาคลาสที่มีคำอธิบายประกอบนั้น

อย่างไรก็ตามตามคำตอบอื่นๆ ของ StackOverflow คุณสามารถ ไม่สามารถระบุคลาสทั้งหมดในแพ็คเกจได้อย่างน่าเชื่อถือเนื่องจากวิธีการทำงานของ ClassLoader ดูเหมือนว่า @ComponentScan จะจัดการให้สำเร็จได้อย่างไร


person David says Reinstate Monica    schedule 07.06.2017    source แหล่งที่มา


คำตอบ (1)


@ComponentScan ทำงานแตกต่างออกไป เวิร์กโฟลว์จะถูกใส่ไว้ในไม่ช้านี้:

  • ค้นหาไฟล์ .class ทั้งหมดในโฟลเดอร์เดียวกันและโฟลเดอร์ย่อยทั้งหมด
  • อ่านไฟล์ .class และรวมไว้ในวัตถุ Resource
  • ตรวจสอบว่าชั้นเรียนมีคำอธิบายประกอบที่จะทำให้เป็นผู้สมัครที่ดีหรือไม่
  • หากคลาสเป็นตัวเลือกที่ดี ให้สร้าง bean จากคลาสนั้น

คลาสจากซอร์สโค้ด Spring มีลักษณะ:

  • ComponentScanAnnotationParser
  • AnnotationConfigUtils
  • ClassPathBeanDefinitionScanner
  • BeanDefinitionReaderUtils
  • DefaultListableBeanFactory
person almirp    schedule 07.06.2017