เรารู้ว่าฟังก์ชั่นการกำหนดค่าอัตโนมัติของสปริงบูตสามารถกำหนดได้ว่าควรใช้การกำหนดค่าสปริงแบบใดและไม่ควรใช้ตามสถานการณ์ที่แตกต่างกัน ตัวอย่างเช่น:
สิ่งนี้ประสบความสำเร็จได้อย่างไร? เหตุผลก็คือใช้การกำหนดค่าตามเงื่อนไขของสปริงซึ่งช่วยให้การกำหนดค่ามีอยู่ในแอปพลิเคชัน แต่การกำหนดค่าเหล่านี้จะถูกละเว้นก่อนที่จะตรงกับเงื่อนไขเฉพาะบางประการ
ในการใช้การกำหนดค่าแบบมีเงื่อนไขเราจำเป็นต้องใช้คำอธิบายประกอบตามเงื่อนไข @Conditional ถัดไปเรามาเขียนตัวอย่างเล็ก ๆ น้อย ๆ เพื่อสัมผัสกับวิธีการทำงานของ @Conditional
1. @Conditional ตัวอย่างเล็ก
เรารู้ว่าคำสั่งที่จะแสดงรายการใน Windows คือ DIR ในขณะที่คำสั่งที่จะแสดงรายการในระบบ Linux คือ LS ขึ้นอยู่กับการกำหนดค่าตามเงื่อนไขเราสามารถบรรลุค่าที่แตกต่างกันภายใต้ระบบปฏิบัติการที่แตกต่างกัน
1. คำจำกัดความของเงื่อนไขการตัดสิน
1. ) เงื่อนไขการตัดสินใจภายใต้ Windows
/** * ใช้อินเทอร์เฟซสภาพของสปริงและแทนที่เมธอดการจับคู่ () และส่งคืนจริงถ้าระบบปฏิบัติการเป็น windows * */คลาสสาธารณะ windowsCondition ใช้เงื่อนไข {@Override บูลีนสาธารณะที่ตรงกัน -2. ) เงื่อนไขการตัดสินใจภายใต้ Linux
/** * ใช้อินเทอร์เฟซเงื่อนไขของสปริงและแทนที่เมธอดการจับคู่ () และส่งคืนจริงถ้าระบบปฏิบัติการเป็น linux * */คลาสสาธารณะ linuxcondition ใช้เงื่อนไข {@Override บูลีนสาธารณะการจับคู่ (บริบทเงื่อนไขการใช้งาน -2. คลาสถั่วภายใต้ระบบที่แตกต่างกัน
1. ) อินเทอร์เฟซ
อินเตอร์เฟสสาธารณะ ListService {Public String showlistline ();}2. ) คลาสถั่วใต้ windows
คลาสสาธารณะ WindowsListservice ใช้ ListService {@Override String Public String showlistline () {return "dir"; -3. ) ชั้นเรียนถั่วภายใต้ Linux
คลาสสาธารณะ LinuxListservice ใช้ listservice {@Override สตริงสาธารณะ showlistline () {return "ls"; -3. คลาสการกำหนดค่า
@ConfigurationPublic คลาส conditionConfig { / *** ผ่านคำอธิบายประกอบ @Conditional และส่งคืนอินสแตนซ์ WindowsListService หากตรงตามเงื่อนไข Windows** / @Bean @Conditional (WindowsCondition.class) รายการสาธารณะ WindonwSlistervice () } / *** ผ่านคำอธิบายประกอบ @Conditional และส่งคืนอินสแตนซ์ LinuxListservice หากตรงตามเงื่อนไข Linux** / @Bean @Conditional (LinuxCondition.Class) LITSERVICE LINUXLISSERVICE () {ส่งคืน LinuxListService ใหม่ (); -4. ชั้นเรียนทดสอบ
Public Class ConditionTest {Public Static Void Main (String [] args) {AnnotationConfigapplicationContext Context = New AnnotationConfigapplicationContext (ConditionConfig.class); ListService ListService = context.getBean (listservice.class); System.out .println (context.getenvironment (). getProperty ("os.name") + "คำสั่งรายการภายใต้ระบบคือ:" + listservice.showlistline ()); -5. เรียกใช้คลาสทดสอบเนื่องจากฉันอยู่ในระบบ Windows 7 ผลลัพธ์คือ
คำสั่งรายการภายใต้ระบบ Windows 7 คือ: DIR
หากคุณอยู่ใน Linux ผลลัพธ์จะเป็น
คำสั่งรายการภายใต้ระบบ Linux คือ: LS
2. การกำหนดค่าแบบมีเงื่อนไขของการบูตสปริง
ในโครงการ Spring Boot จะมีแพ็คเกจขวดที่เรียกว่า Spring-Boot-autoconfigure
การกำหนดค่าแบบมีเงื่อนไขถูกนำไปใช้ในขวดนี้ ใช้คำอธิบายประกอบแบบมีเงื่อนไขต่อไปนี้ซึ่งเริ่มต้นด้วย @Conditional:
ถัดไปลองดูคอลัมน์ซอร์สโค้ด:
ใช้ JDBCTEMPLATEAUTOCONFIGURATION เป็นตัวอย่างมันมีรหัสนี้:
@Bean @Primary @ConditionAlonMissingBean (JDBCOPERATIONS.CLASS) JDBCTEMPLATE JDBCTEMPLATE () {ส่งคืน JDBCTEMPLATE ใหม่ (this.Datasource); -ถั่ว jdbctemplate จะเริ่มต้นเฉพาะเมื่อไม่มี JDBCoperations (หากคุณดูซอร์สโค้ดของ JDBCTEMPLATE คุณจะพบว่าคลาส JDBCTEMPLATE ใช้อินเตอร์เฟส JDBCOPERATIONS)
จากเนื้อหาข้างต้นเราสามารถอ่านซอร์สโค้ดที่เกี่ยวข้องกับการกำหนดค่าอัตโนมัติ
สรุป
ด้านบนคือการกำหนดค่าอัตโนมัติของ @Conditional และ Spring Boot ใน Spring Boot แนะนำให้คุณรู้จักโดยตัวแก้ไข ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!