รูปแบบการออกแบบใดที่ใช้ใน Spring framework? [ปิด]


90

รูปแบบการออกแบบใดที่ใช้ใน Spring framework?


มีมากกว่า 10 รูปแบบ ได้แก่ .. MVC, Front controller, View Helper, Singleton, Prototype, Factory ฯลฯ javabench.in/2012/02/design-patterns-being-used-in-spring.html
Raúl

คำตอบ:


75

มีการใช้รูปแบบการออกแบบที่แตกต่างกันมากมาย แต่มีบางอย่างที่ชัดเจน:

  • พร็อกซี่ - ใช้อย่างมากในAOPและระยะไกล

  • Singleton - bean ที่กำหนดในไฟล์ config spring เป็น singletons ตามค่าเริ่มต้น

  • วิธีเทมเพลต - ใช้อย่างกว้างขวางเพื่อจัดการกับโค้ดที่ทำซ้ำสำเร็จรูป (เช่นปิดการเชื่อมต่ออย่างหมดจด ฯลฯ ยกตัวอย่างเช่นJdbcTemplate , JmsTemplate , JpaTemplate


อัปเดตความคิดเห็นต่อไปนี้: สำหรับ MVC คุณอาจต้องการอ่านข้อมูลอ้างอิง MVC

รูปแบบที่ชัดเจนในการใช้ MVC:

  • Model View Controller :-) ข้อดีของ Spring MVC คือตัวควบคุมของคุณเป็น POJO ซึ่งต่างจากการเป็น servlets ทำให้การทดสอบคอนโทรลเลอร์ง่ายขึ้น สิ่งหนึ่งที่ควรทราบก็คือการควบคุมเป็นสิ่งจำเป็นเพียงเพื่อจะกลับเป็นชื่อที่มุมมองเชิงตรรกะและการเลือกมุมมองที่เหลืออยู่เพื่อแยกViewResolver ทำให้ง่ายต่อการนำคอนโทรลเลอร์กลับมาใช้ใหม่สำหรับเทคโนโลยีมุมมองต่างๆ

  • ตัวควบคุมด้านหน้าด้านหน้าควบคุมSpring มีDispatcherServletเพื่อให้แน่ใจว่าคำขอที่เข้ามาจะถูกส่งไปยังคอนโทรลเลอร์ของคุณ

  • View Helper - Spring มีแท็ก JSP ที่กำหนดเองจำนวนหนึ่งและมาโครความเร็วเพื่อช่วยในการแยกโค้ดออกจากการนำเสนอในมุมมอง


ขอบคุณรูปแบบการออกแบบที่ใช้ในโมดูล Spring MVC คืออะไร?
Tony

10
ฉันไม่คิดว่า Spring ใช้ซิงเกิลตันสำหรับถั่ว โปรดทราบว่าเดี่ยวขอบเขตถั่วจะมีเช่นเดียวต่อบริบทแอพลิเคชัน ดังนั้นหากแอปพลิเคชันของคุณมีบริบท Spring สองบริบทพวกเขาจะโหลดซิงเกิลตันบีนเดียวกันFooและคุณดึงอินสแตนซ์ของFooต่อบริบทคุณจะได้รับการอ้างอิงอ็อบเจ็กต์สองรายการที่แตกต่างกัน แต่รูปแบบการออกแบบที่ใช้ที่นี่คือรุ่นฟลายเวท
Luiggi Mendoza

@Luiggi Mendoza คุณหมายความว่าฤดูใบไม้ผลิไม่มีวัตถุเดี่ยวเหรอ? โปรดอธิบายฉันด้วยคำชี้แจง
Kumaresan Perumal

1
@KumaresanPerumal มีความแตกต่างอย่างมีนัยสำคัญระหว่างรูปแบบ Singleton และอินสแตนซ์ซิงเกิลตัน (สังเกตตัวอักษร S บน / ตัวพิมพ์เล็ก) รูปแบบ Singleton เป็นเรื่องเกี่ยวกับการรักษาอินสแตนซ์เดียวของวัตถุผ่านแอปพลิเคชันทั้งหมด ฤดูใบไม้ผลิอะไรไม่เมื่อตรวจสอบถั่วเดี่ยวคือการสร้างเช่นเดียวต่อบริบทแอพลิเคชัน บริบทของแอปพลิเคชันเป็นองค์ประกอบหลักของ Spring และทำหน้าที่ในการมอบหมายการสร้างและการเรียกคืนวัตถุ singleton bean ถูกสร้างขึ้นเพียงครั้งเดียวต่อบริบทของแอ็พพลิเคชัน
Luiggi Mendoza

ลิงค์สำหรับควบคุมดูรูปแบบการควบคุมมุมมองด้านหน้าและช่วยให้ใช้เวลาในการoracle.com/technetwork/java/index.html โปรดอัปเดตคำตอบด้วยลิงก์ที่ใช้งานได้หรือไม่
SpringLearner

12

และแน่นอนว่าการฉีดแบบพึ่งพาหรือ IoC (การควบคุมแบบผกผัน) ซึ่งเป็นศูนย์กลางของเนื้อหา BeanFactory / ApplicationContext ทั้งหมด


10

สิ่งที่ DI เป็นรูปแบบกลยุทธ์บางอย่าง เมื่อใดก็ตามที่คุณต้องการแลกเปลี่ยนตรรกะ / การใช้งานได้โดยทั่วไปคุณจะพบอินเทอร์เฟซและวิธีการตั้งค่าที่เหมาะสมบนคลาสโฮสต์เพื่อเชื่อมต่อการใช้งานอินเทอร์เฟซที่กำหนดเองของคุณ


คำตอบจากตัวอาจารย์เอง @ โอลิเวอร์คุณสามารถระบุรูปแบบเพิ่มเติมได้ที่นี่หรือไม่?
Gaurav

7

Spring เป็นชุดรูปแบบ API แนวปฏิบัติที่ดีที่สุดคุณสามารถเขียนรายการช้อปปิ้งได้ตราบเท่าที่แขนของคุณ วิธีที่ API ได้รับการออกแบบสนับสนุนให้คุณ (แต่ไม่ได้บังคับให้คุณ) ทำตามรูปแบบเหล่านี้และครึ่งหนึ่งของเวลาที่คุณติดตามโดยไม่รู้ว่าคุณกำลังทำอยู่


3

รูปแบบตัวระบุตำแหน่งบริการ - ServiceLocatorFactoryBean เก็บข้อมูลของถั่วทั้งหมดในบริบท เมื่อรหัสไคลเอนต์ขอบริการ (bean) โดยใช้ชื่อจะระบุตำแหน่ง bean นั้นในบริบทและส่งกลับ รหัสไคลเอนต์ไม่จำเป็นต้องเขียนโค้ดที่เกี่ยวข้องกับสปริงเพื่อค้นหาบีน



1

รูปแบบโรงงานยังใช้สำหรับการโหลดถั่วผ่าน BeanFactory และบริบทแอปพลิเคชัน


1

รูปแบบวิธีการโรงงาน: BeanFactory สำหรับการสร้างอินสแตนซ์ของอ็อบเจ็กต์ Singleton: ประเภทอินสแตนซ์สามารถเป็น singleleton สำหรับบริบท Prototype: สามารถเป็นต้นแบบได้ รูปแบบตัวสร้าง: คุณยังสามารถกำหนดวิธีการในคลาสที่จะรับผิดชอบในการสร้างอินสแตนซ์ที่ซับซ้อน


0

ภาชนะสปริงสร้างวัตถุถั่วขึ้นอยู่กับขอบเขตของถั่ว (ซิงเกิลตันต้นแบบ ฯลฯ .. ) ดังนั้นลักษณะเช่นนี้การดำเนินการรูปแบบโรงงานบทคัดย่อ ในการใช้งานภายในของ Spring ฉันแน่ใจว่าแต่ละขอบเขตควรเชื่อมโยงกับประเภทโรงงานเฉพาะ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.