คำนำ
Javaconfig กลายเป็นโครงการย่อยของฤดูใบไม้ผลิ มันให้ข้อมูลนิยามถั่วผ่านชั้นเรียน Java ในเวอร์ชั่น Spring4 Javaconfig ได้กลายเป็นฟังก์ชั่นหลักของ Spring4 อย่างเป็นทางการ
บทความนี้จะแนะนำรายละเอียดเนื้อหาที่เกี่ยวข้องเกี่ยวกับการกำหนดค่าตามคลาส Java ในฤดูใบไม้ผลิ ฉันจะไม่พูดด้านล่างมากนัก มาดูการแนะนำรายละเอียดร่วมกันกันเถอะ
1 นิยามถั่ว
Pojo ธรรมดาสามารถให้ข้อมูลนิยามถั่วสำหรับคอนเทนเนอร์ฤดูใบไม้ผลิตราบใดที่มีการทำเครื่องหมายคำอธิบายประกอบ @configuration
@ConfigurationPublic คลาส SystemConfig { / ** * กำหนดถั่วและอินสแตนซ์ * * @return * / @bean UserDao UserDao () {ส่งคืน userDao ใหม่ (); } @Bean Public Deptdao Deptdao () {ส่งคืน deptdao ใหม่ (); } / ** * กำหนด Userservice และฉีด UserDao และ Deptdao * * @return * / @Bean Public Userservice Userservice () {userservice service = new userservice (); Service.setUserdao (userdao ()); Service.setDeptDao (Deptdao ()); บริการส่งคืน; -วิธีการของคลาสนี้มีคำอธิบายประกอบโดยคำอธิบายประกอบ @bean นั่นคือเพื่อกำหนดถั่ว ประเภทของถั่วถูกกำหนดโดยประเภทของค่าการส่งคืนวิธีการ ชื่อเริ่มต้นเป็นชื่อวิธีและชื่อเมธอด นอกจากนี้คุณยังสามารถระบุชื่อถั่วโดยป้อนพารามิเตอร์เช่น @bean (name =” xxx”) วิธีการของร่างกายที่ทำเครื่องหมายโดย @bean ให้ตรรกะในการสร้างอินสแตนซ์ถั่ว
การกำหนดค่าข้างต้นเทียบเท่ากับ XML ต่อไปนี้:
<bean id = "userdao"/> <bean id = "deptdao"/> <bean id = "userservice" p: userdao-ref = "userdao" p: deptdao-ref = "deptdao"/>>>
เมื่อเทียบกับวิธีการกำหนดค่าตามคลาส Java ซึ่งขึ้นอยู่กับวิธีการกำหนดค่า XML หรือคำอธิบายประกอบที่ใช้คำอธิบายประกอบ -
เนื่องจากคลาสคำอธิบายประกอบ @Configuration มี @component คลาสเหล่านี้สามารถฉีดเข้าไปในถั่วอื่น ๆ เช่นถั่วธรรมดา
@ConfigurationPublic คลาส ApplicationConfig {@autoWired Private SystemConfig SystemConfig; @Bean Public Authority Service AuthorityService () {AuthorityService Service = New AuthorityService (); Service.setUserdao (SystemConfig.userdao ()); Service.setDeptDao (SystemConfig.deptdao ()); บริการส่งคืน; -ฤดูใบไม้ผลิใช้การปรับปรุง AOP สำหรับทุกวิธีที่ทำเครื่องหมาย @Bean ในคลาสการกำหนดค่าแนะนำตรรกะการจัดการวงจรชีวิตของถั่ว ตัวอย่างเช่น SystemConfig.userdao () ด้านบนจะส่งคืนซิงเกิลที่สอดคล้องกับถั่ว
ใน @Bean เรายังสามารถควบคุมขอบเขตของถั่วได้ด้วยการใส่คำอธิบายประกอบคำอธิบายประกอบ @Scope:
@Scope ("Prototype")@Beanpublic Deptdao Deptdao () {return New Deptdao ();}ด้วยวิธีนี้การโทรแต่ละครั้งไปยังเมธอด Deptdao () จะส่งคืนอินสแตนซ์ใหม่:
AssertNotSame (AuthorityService.getDeptDao (). HashCode (), AuthorityService.getDeptDao (). HashCode ());
หมายเหตุ: ใช้คลาสที่ใช้ Java สำหรับการกำหนดค่าสปริง AOP และไลบรารี CGLIB จะต้องรวมอยู่ใน ClassPath
2 เริ่มภาชนะสปริง
2.1 ใช้เฉพาะคลาส @Configuration
คุณสามารถใช้ตัวสร้างของคลาส AnnotationConfigapplicationContext เพื่อส่งผ่านในคลาส Java ที่ทำเครื่องหมาย @Configuration เพื่อเริ่มต้นคอนเทนเนอร์สปริง
ApplicationContext Context = New AnnotationConfigaplicationContext (SystemConfig.class); Userservice userservice = (ผู้ใช้) บริบท. getBean ("userservice"); assertNotNull (userservice);หากมีคลาสการกำหนดค่า @Configuration หลายคลาสคุณสามารถลงทะเบียนได้ใน AnnotationConfigapplicationContext จากนั้นใช้คลาสการกำหนดค่าเหล่านี้โดยรีเฟรชคอนเทนเนอร์:
AnnotationConfigApplicationContext Context = New AnnotationConfigapplicationContext (); // ลงทะเบียนคลาสการกำหนดค่าหลายคลาสบริบท register (SystemConfig.class); บริบท register (ApplicationConfig.class); // รีเฟรชคอนเทนเนอร์ (ใช้คลาสการกำหนดค่าเหล่านี้) บริบท
นอกจากนี้คุณยังสามารถรวบรวมคลาสการกำหนดค่าหลายคลาสลงในคลาสการกำหนดค่าหนึ่งคลาสผ่าน @Import จากนั้นเพียงลงทะเบียนคลาสการกำหนดค่าที่ประกอบเพื่อเริ่มคอนเทนเนอร์:
@การกำหนดค่า @import (SystemConfig.Class) คลาสสาธารณะ ApplicationConfig2 {@autoWired Private SystemConfig SystemConfig; @Bean Public Authority Service AuthorityService () {AuthorityService Service = New AuthorityService (); Service.setUserdao (SystemConfig.userdao ()); Service.setDeptDao (SystemConfig.deptdao ()); บริการส่งคืน; -การทดสอบหน่วย:
AnnotationConfigApplicationContext Context = New AnnotationConfigapplicationContext (ApplicationConfig2.class); ApplicationConfig2 config = context.getBean (ApplicationConfig2.class); config.authorityService (); assertNotNull (AuthorityService.getDeptDao ()); assertNotSame (AuthorityService.getDeptDao (). HashCode (), ผู้มีอำนาจ
2.2 การใช้ไฟล์ XML เพื่ออ้างถึงการกำหนดค่าของคลาส @Configuration
คลาสการกำหนดค่าที่ทำเครื่องหมาย @Configuration เป็นถั่วด้วยดังนั้นจึงสามารถสแกนได้ด้วย <บริบทของ Spring: Component-Scan> ดังนั้นหากคุณต้องการรวบรวมคลาสการกำหนดค่าลงในไฟล์การกำหนดค่า XML และเริ่มต้นสปริงผ่านไฟล์การกำหนดค่า XML คุณจะต้องสแกนคลาสการกำหนดค่าที่สอดคล้องกันผ่าน <บริบท: Component-Scan> ใน XML
<บริบท: Component-Scan base-package = "net.deniro.spring4.conf" Resource-Pattern = "ApplicationConfig2.class" /> >>
2.3 การกำหนดค่าไฟล์ XML อ้างอิงในคลาส @Configuration
ในคลาสการกำหนดค่า @Configuration คุณสามารถแนะนำไฟล์การกำหนดค่า XML โดยตรงผ่าน @importresource เพื่อให้คุณสามารถอ้างอิงโดยตรงไปยังถั่วที่กำหนดไว้ในไฟล์การกำหนดค่า XML ผ่าน @autowired
ไฟล์กำหนดค่า:
<bean id = "groupdao"/> <bean id = "roledao"/>>>>
@configuration class:
@importresource ("classpath: beans5-11.xml") @configurationpublic คลาส serviceConfig {@bean @autowired การประชาสัมพันธ์ความสัมพันธ์บริการความสัมพันธ์ (Groupdao Groupdao, Roledao Roledao) Service.setGroupDao (GroupDAO); Service.setroledao (Roledao); บริการส่งคืน; -การทดสอบหน่วย:
AnnotationConfigApplicationContext บริบท = ใหม่หมายเหตุประกอบการกำหนดการกำหนดค่า (serviceConfig.class); serviceConfig config = context.getBean (serviceConfig.class); assertNotNull (config); ความสัมพันธ์บริการ = config.RelationService ("roledao")); assertNotNull (service.getRoledao ());ตราบใดที่ข้อมูลคำจำกัดความเหล่านี้สามารถโหลดได้ในรูปแบบที่แตกต่างกันของถั่วลงในภาชนะสปริงสปริงสามารถเติมเต็มการประกอบระหว่างถั่วได้อย่างชาญฉลาด
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะมีค่าอ้างอิงบางอย่างสำหรับการศึกษาหรือที่ทำงานของทุกคน หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้เพื่อสื่อสาร ขอบคุณสำหรับการสนับสนุน Wulin.com