1. สปริงทำอะไรได้บ้าง?
จุดประสงค์หลักของฤดูใบไม้ผลิคือการทำให้ J2EE ใช้งานง่ายและส่งเสริมนิสัยการเขียนโปรแกรมที่ดี
แกนกลางการออกแบบของสปริงคอนเทนเนอร์ควบคุมแบบกลับด้านคือแพ็คเกจ org.springframework.bans ออกแบบมาเพื่อทำงานกับ Javabeans แพ็คเกจนี้ไม่ได้ใช้โดยตรงโดยผู้ใช้ แต่ทำหน้าที่เป็นพื้นฐานสำหรับบริการการทำงานอื่น ๆ เพิ่มเติม สิ่งที่เป็นนามธรรมในระดับที่สูงขึ้นคือ "โรงงานถั่ว" โรงงาน Spring Bean เป็นโรงงานปกติที่ช่วยให้วัตถุสามารถเรียกคืนได้ด้วยชื่อและจัดการความสัมพันธ์ระหว่างวัตถุ โรงงานถั่วรองรับรูปแบบวัตถุสองรูปแบบ:. Singleton: ในรูปแบบนี้มีอินสแตนซ์วัตถุที่ใช้ร่วมกันซึ่งมีชื่อเฉพาะซึ่งถูกดึงออกมาเมื่อค้นหา นี่เป็นค่าเริ่มต้นและใช้กันมากที่สุด มันเป็นรูปแบบที่เหมาะสำหรับวัตถุไร้สัญชาติ .prototype: ในโหมดนี้วัตถุแยกต่างหากจะถูกสร้างขึ้นทุกครั้งที่ได้รับการดึงข้อมูล
2. วิธีการโหลดสปริงเริ่มและการใช้งาน
คนแรก: ใช้งานการดำเนินงานก่อนที่จะเริ่มต้นและทำลายถั่วโดยการใส่คำอธิบายประกอบวิธี @PostConstruct และ @Predestroy
ประเภทที่สอง: กำหนดวิธีการเริ่มต้นและวิธีการ destory-method ใน xml
ประเภทที่สาม: ใช้การเริ่มต้นเบียนและอินเทอร์เฟซ disposablebean ผ่านถั่ว
ประเภทที่สี่: เขียนคลาสเพื่อใช้งานอินเตอร์เฟส BeanPostProcessor อินเทอร์เฟซนี้มีสองวิธี
(1): วิธีการ postprocessbeforeinitialization โทรหาวิธีนี้ก่อนที่ถั่วที่กำหนดไว้ในฤดูใบไม้ผลิจะเริ่มต้นก่อนที่ถั่วที่กำหนดในฤดูใบไม้ผลิ
(2): วิธีการ postprocessafterinitialization โทรหาวิธีนี้หรือการใช้งานหลังจากถั่วที่กำหนดในฤดูใบไม้ผลิจะเริ่มต้นหรือเริ่มต้น
InstantiationawareBeanPostProcessor เป็นส่วนหนึ่งของ BeanPostProcessor
ดำเนินการหลังจากโหลดคอนเทนเนอร์สปริง
จากผู้ฟังฤดูใบไม้ผลิเป็นรายการ
org.springframework.web.context.contextloaderlistener
ค้นหาวิธีการเริ่มต้นฤดูใบไม้ผลิ
/*** เริ่มต้นบริบทแอปพลิเคชันรูทเว็บ */ @Override โมฆะสาธารณะบริบท (เหตุการณ์ ServletContextEvent) {InitWebapplicationContext (Event.getServletContext ()); -ป้อนเมธอด InitWebapplicationContext
if (this.context == null) {this.context = createWebapplicationContext (servletContext); } if (this.context อินสแตนซ์ของการกำหนดค่า WebBapplicationContext) {configureDaRableWebapplicationContext cwac = (configurableWableBapplicationContext) this.context; if (! cwac.isactive ()) {// บริบทยังไม่ได้รับการรีเฟรช -> ให้บริการเช่น // การตั้งค่าบริบทหลักการตั้งค่ารหัสบริบทแอปพลิเคชัน ฯลฯ ถ้า (cwac.getparent () == null) {// อินสแตนซ์บริบทถูกฉีด ApplicationContext parent = loadParentContext (servletContext); cwac.setparent (ผู้ปกครอง); } configureandrefreshwebapplicationContext (CWAC, servletContext); - ApplicationListener
1. เขียนคลาสผู้ฟังที่ใช้ ApplicationListener
นำเข้า org.springframework.context.applicationListener; นำเข้า org.springframework.context.event.contextrefreshedevent; นำเข้า org.springframework.stereotype.service; @servicepublic onapplicationEvent (contextrefreshedEvent Event) {ถ้า (Event.getApplicationContext (). getParent () == null) // บริบทแอปพลิเคชันรูทไม่มีพาเรนต์เขาเป็นเจ้านาย {// รหัสตรรกะที่ต้องดำเนินการจะถูกดำเนินการหลังจากที่คอนเทนเนอร์สปริงเริ่มต้น System.out.println ("/n/n/n/n/n/n/n ______________/n/n/n โหลด/n/n _________/n/n/n"); } // หรือวิธีการต่อไปนี้ถ้า (Event.getApplicationContext (). getDisplayName (). เท่ากับ ("รูท webapplicationContext")) {system.out.println ("/n/n/n ________/n/n/n โหลดครั้งเดียว/n/n _________/n/n"); -2. ตั้งค่าแพ็คเกจสแกนบริการในไฟล์กำหนดค่า (ApplicationContextServlet.xml)
<!-ลงทะเบียน @Controller, @Service-> <บริบท: Component-Scan base-base-package = "com.test.controller" use-default-filters = "false"> <บริบท: รวมประเภทตัวกรอง = "คำอธิบายประกอบ" Expression = "org.springframework.stereotype.controller expression = "org.springframework.stereotype.service" /> < /บริบท: Component-Scan>
3. ปรับใช้โครงการเริ่มต้นและพิมพ์ "โหลด" หลังจากโหลดฤดูใบไม้ผลิ
ApplicationOnText และ WebApplicationOntext หลังจากใช้ MVC จะเรียกวิธีการข้างต้นสองครั้ง จะแยกแยะระหว่างภาชนะทั้งสองนี้ได้อย่างไร?
แต่ในเวลานี้จะมีปัญหา ในโครงการเว็บ (SpringMVC) จะมีสองคอนเทนเนอร์ในระบบหนึ่งคือบริบทของการเพิ่มรูทและอื่น ๆ เป็น ProjectName-ServletContext ของเราเอง
ในกรณีนี้วิธี onapplicationEvent จะถูกดำเนินการสองครั้ง เพื่อหลีกเลี่ยงปัญหาที่กล่าวถึงข้างต้นเราสามารถเรียกใช้รหัสโลจิคัลหลังจากเริ่มต้นบริบทของรูทแอปพลิเคชัน หากการเริ่มต้นของคอนเทนเนอร์อื่น ๆ เสร็จสมบูรณ์จะไม่มีการประมวลผลใด ๆ หลังจากรหัสที่แก้ไขเสร็จสมบูรณ์รหัสจะถูกแก้ไข
ดังนี้:
@Override โมฆะสาธารณะ onApplicationEvent (เหตุการณ์ contextrefreshedEvent) {ถ้า (event.getApplicationContext (). getParent () == null) {// บริบทแอปพลิเคชันรูทไม่มีพาเรนต์มันเป็นเจ้านาย // รหัสตรรกะที่ต้องดำเนินการจะถูกดำเนินการเมื่อคอนเทนเนอร์สปริงเริ่มต้น -ลำดับของการเริ่มต้นคือ:
Constructor> @PostConstruct> InitializingBean> init-method
สรุป
ข้างต้นคือทั้งหมดที่เกี่ยวกับการวิเคราะห์เบื้องต้นของกรอบฤดูใบไม้ผลิในบทความนี้ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้ได้ตลอดเวลาและบรรณาธิการจะตอบกลับทุกคนในเวลา ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!