ฤดูใบไม้ผลิเป็นแบบผกผันของการควบคุม (IOC) และกรอบการทำงานแบบแทนเจนต์ (AOP) วิธีรับถั่วที่กำหนดค่าสปริงในโปรแกรม?
โรงงานถั่ว (com.springframework.beans.factory.beanfactory) เป็นอินเทอร์เฟซหลักของกรอบฤดูใบไม้ผลิ มันมีกลไกการกำหนดค่า IOC ขั้นสูง BeanFactory ทำให้สามารถจัดการวัตถุ Java ประเภทต่างๆได้ บริบทแอปพลิเคชัน (com.springframework.context.applicationContext) ขึ้นอยู่กับ beanfactory และให้ฟังก์ชั่นที่เน้นแอปพลิเคชันมากขึ้น ให้การสนับสนุนระหว่างประเทศและระบบจัดกิจกรรมเฟรมเวิร์กทำให้ง่ายต่อการสร้างแอปพลิเคชันที่ใช้งานได้จริง โดยทั่วไปเราเรียกว่า BeanFactory คอนเทนเนอร์ IOC และ ApplicationContext บริบทแอปพลิเคชัน แต่บางครั้งเพื่อความสะดวกในการเขียนเรายังเรียก ApplicationContext Spring Container
สำหรับจุดประสงค์ของทั้งสองเราสามารถแบ่งพวกเขา: Beanfactory เป็นโครงสร้างพื้นฐานของกรอบฤดูใบไม้ผลิมุ่งเป้าไปที่ฤดูใบไม้ผลิ ApplicationContext ใช้สำหรับนักพัฒนาที่ใช้ Framework Spring ในเกือบทุกโอกาสแอปพลิเคชันเราใช้ ApplicationContext โดยตรงแทนการผลิต beanfactory
มีความแตกต่างอย่างมีนัยสำคัญระหว่างการเริ่มต้นของ ApplicationContext และ BeanFactory: เมื่อ beanfactory เริ่มต้นคอนเทนเนอร์มันจะไม่อินสแตนซ์ถั่วจนกว่าถั่วเป้าหมายจะเข้าถึงเป็นครั้งแรก ในขณะที่ ApplicationContext สร้างอินสแตนซ์ถั่วเดี่ยวทั้งหมดเมื่อเริ่มต้นบริบทแอปพลิเคชัน ดังนั้นเวลาเริ่มต้นของ ApplicationContext จะนานกว่าของ beanfactory เล็กน้อยเล็กน้อย
บทความนี้ไม่เกี่ยวข้องกับการฉีดอัตโนมัติผ่าน @Resource และ @autowired และได้รับเฉพาะถั่วในไฟล์การกำหนดค่าฤดูใบไม้ผลิผ่าน ApplicationContext
เพื่อให้ได้ถั่วที่กำหนดค่าใน XML สิ่งที่สำคัญที่สุดคือการได้รับ org.springframework.context.applicationContext
วิธีแรกในการรับ ApplicationContext:
นำเข้า org.springframework.context.applicationContext; นำเข้า org.springframework.context.support.filesystemxmlapplicationContext; ApplicationContext ApplicationContex
หรือ
นำเข้า org.springframework.context.applicationContext; นำเข้า org.springframework.context.support.classpathxmlapplicationContext; ApplicationContext Private ApplicationContext = ใหม่ classPathxMlApplicationContext ("ApplicationContext.xml");การสร้างอินสแตนซ์แอปพลิเคชันแอปพลิเคชันด้วยวิธีนี้ใช้เวลานานมาก วิธีนี้เหมาะสำหรับการใช้งานแบบสแตนด์อโลนโดยใช้กรอบสปริง ขอแนะนำให้ใช้เมื่อโปรแกรมจำเป็นต้องเริ่มต้นสปริงด้วยตนเองผ่านไฟล์การกำหนดค่า คลาสการใช้งานหลักของ ApplicationContext คือ classpathxmlapplicationContext และ filesystemxmlapplicationContext ไฟล์การกำหนดค่าโหลดเดิมจาก classPath โดยค่าเริ่มต้นและไฟล์การกำหนดค่าโหลดหลังจากระบบไฟล์โดยค่าเริ่มต้น
ตัวอย่าง:
Public Class BeanManager {Private Static ApplicationContext Context = ใหม่ classPathxMlApplicationContext ("AppContext.xml"); วัตถุคงที่สาธารณะ getBean (สตริง Beanid) {return context.getBean (beanid);}}}เขียน servlet ใน web.xml เริ่มต้นโดยอัตโนมัติและโทรหา BeanManager ในวิธีการเริ่มต้น
init () พ่น servletexception {BeanManager bm = new BeanManager (); // เป็นทางเลือกดังนั้นฤดูใบไม้ผลิจะโหลดการกำหนดค่าถั่วเมื่อเริ่มต้นแอปพลิเคชันเว็บ // มิฉะนั้นมันจะถูกโหลดเมื่อ beanManager ถูกเรียกเป็นครั้งแรกส่งผลกระทบต่อความเร็วหนึ่งครั้ง -ใช้ BeanManager.getBean (String Beanid); ในรหัส Java เพื่อรับอินสแตนซ์ถั่ว
วิธีที่สองในการรับ ApplicationContext: รับออบเจ็กต์ ApplicationContext ผ่านคลาสเครื่องมือที่จัดทำโดย Spring มันเป็นวิธีการที่ปรับแต่งเป็นพิเศษสำหรับโครงการเว็บ ขอแนะนำให้ใช้ในโครงการเว็บ ตัวอย่างเช่น:
servletContext servletContext = request.getSession (). getServletContext (); ApplicationContext AC1 = WebApplicationContextUtils .GetRequiredWebapplicationContext (servletContext SC) ApplicationContext AC2 = WebApplicationContextils .GetWebApplicationContext
รับวัตถุอินสแตนซ์ ApplicationContext ผ่าน javax.servlet.servletContext ซึ่งหมายความว่าจะต้องใช้คำขอเซสชัน ฯลฯ
ด้วยวิธีนี้วัตถุ ApplicationContext ไม่สามารถตั้งค่าเป็นตัวแปรสมาชิกได้ ในแต่ละวิธีเฉพาะคุณจะต้องได้รับ servletContext ผ่านคำขอเซสชัน ฯลฯ จากนั้นรับอินสแตนซ์ ApplicationContext
ดังนั้นวิธีนี้แนะนำเฉพาะในกรณีที่คุณสามารถรับวัตถุ ServletContext และคุณไม่จำเป็นต้องกำหนดวัตถุ ApplicationContext เป็นตัวแปรสมาชิก
หมายเหตุ: เมื่อใช้ WebApplicationContextUtils เพื่อรับอินสแตนซ์ ApplicationContext คุณต้องเพิ่ม org.springframework.web.context.context.contextloaderListener Listener ในไฟล์การกำหนดค่า web.xml มิฉะนั้นจะไม่ได้รับวัตถุแอปพลิเคชัน
ไฟล์กำหนดค่า: web.xml
<!-contextloaderListener ฉีด ApplicationContext โดยอัตโนมัติและรับ-> <!-ตำแหน่งการโหลดไฟล์การกำหนดค่าสปริง-> <context-param> <param-name> contextConfigLocation </par am-name> <param-value> /web-inf/spring/appcontext.xml,/web-inf/spring/appinterceptor.xml </param-value> </context-param>
3. สืบทอดมาจาก ApplicationObjectSupport คลาสนามธรรม
แอปพลิเคชันคลาสนามธรรม ApplicationObjectSupport ให้วิธี getApplicationContext () ซึ่งสามารถรับ ApplicationContext ได้อย่างง่ายดาย เมื่อฤดูใบไม้ผลิเริ่มต้นวัตถุ ApplicationContext จะถูกฉีดผ่านเมธอด SetApplicationContext (ApplicationContext บริบท) ของคลาสนามธรรม
4. สืบทอดมาจากคลาสนามธรรม WebApplicationObjectSupport
ใช้ getWebapplicationContext () เพื่อรับ org.springframework.web.context.webapplicationContext เนื่องจากเว็บแอปพลิเคชันมีคุณสมบัติมากกว่าแอปพลิเคชันทั่วไป WebApplicationContext ขยายแอปพลิเคชันแอปพลิเคชัน WebApplicationContext กำหนด root_web_application_ context_attribute เมื่อบริบทเริ่มต้นอินสแตนซ์ WebApplicationContext จะถูกวางไว้ในรายการแอตทริบิวต์ของ ServletContext ด้วยคีย์นี้ ดังนั้นเราสามารถรับ WebApplicationContext ได้โดยตรงจากเว็บคอนเทนเนอร์ผ่านคำสั่งต่อไปนี้:
WebApplicationContext WAC = (WebApplicationContext) ServletContext.getAttribute (webApplicationContext.root_web_application_context_attribute);
5. ใช้อินเทอร์เฟซ ApplicationContextaware
ใช้วิธีการ setApplicationContext (applicationcontext context) ของอินเทอร์เฟซนี้และบันทึกวัตถุ ApplicationContext เมื่อสปริงเริ่มต้นวัตถุ ApplicationContext จะถูกฉีดผ่านวิธีนี้
วิธีที่สามสี่และห้าทั้งหมดต้องการการกำหนดค่าคลาสในไฟล์กำหนดค่าสปริง:
<!-สมมติว่า ApplicationContextTool เป็นคลาสการใช้งานเฉพาะที่สืบทอดหรือใช้วิธีที่สามสี่และห้า-> <bean> </ebean>
มิฉะนั้น ApplicationContext จะไม่ถูกเรียกคืนและ NULL จะถูกส่งคืน
เนื้อหาข้างต้นแนะนำบทสรุปของวิธี Spring Bean ใน Java ฉันหวังว่าคุณจะชอบ