Spring - ความสับสนเกี่ยวกับการตั้งค่า?


9

ที่ไหนสักแห่งที่ฉันอ่านสปริงให้ความสะดวกสบายมากกว่าการตั้งค่า แต่คนในฤดูใบไม้ผลิกำลังนำการเปลี่ยนแปลงมามากมายในการกำหนดค่าซึ่งตอนนี้ฉันเริ่มสับสนแล้วที่จะใช้การกำหนดค่า xml หรือคำอธิบายประกอบ

ฉันต้องการให้ทุกคนแนะนำวิธีการ Surefire หรือกฎง่ายๆในการใช้ xml และคำอธิบายประกอบ


ตัวอย่างที่ SO เพื่อแสดงว่าผู้เริ่มต้นอย่างฉันเริ่มสับสนกับการกำหนดค่า

  • การเชื่อมโยง-1

    ฉันดูเหมือนจะไม่เข้าใจที่อยู่เบื้องหลังการทำงานและ<context:annotation-config><context:component-scan>

    จากสิ่งที่ฉันได้อ่านพวกเขาดูเหมือนจะจัดการกับคำอธิบายประกอบต่าง ๆ (@Required, @Autowired etc vs @Component, @Repository, @Service ฯลฯ ) แต่จากสิ่งที่ฉันได้อ่านพวกเขาลงทะเบียนคลาสตัวประมวลผล bean โพสต์เดียวกัน

    เพื่อสร้างความสับสนให้ฉันยิ่งขึ้นมีannotation-configแอตทริบิวต์ใน<context:component-scan>...

  • ลิงค์ 2

    ฉันยังมีแท็กสแกนองค์ประกอบ:

    <context:component-scan base-package="com.mycompany.maventestwebapp" />

    แต่ฉันมีแท็กอื่น (ที่ดูเหมือนว่ามีงานที่คล้ายกัน) อันนี้:

    <annotation-driven />

    ความแตกต่างระหว่างสองแท็กเหล่านี้คืออะไร อีกสิ่งที่ "แปลก" คือตัวอย่างก่อนหน้านี้ (ที่ไม่ได้ใช้แท็กคำอธิบายประกอบ) คล้ายกับโครงการสร้างโดย STS โดยใช้โครงการ Spring MVC Template แต่ถ้าฉันลบแท็กคำอธิบายประกอบที่ขับเคลื่อนออกจากการกำหนดค่า ยื่นโครงการไม่ทำงานและแจ้งข้อผิดพลาดต่อไปนี้ให้ฉัน: สถานะ HTTP 404 - ...

ฤดูใบไม้ผลิ 3.2 ไม่จำเป็นต้องใช้ cglib อีกต่อไปสำหรับการใช้พร็อกซี่ คำพูดจากบล็อกสปริงส์

เพื่อสร้างพร็อกซี่ดังกล่าวสปริงใช้ห้องสมุดบุคคลที่สามชื่อว่า cglib น่าเสียดายที่โครงการนี้ไม่ทำงานอีกต่อไป ใน Spring 3.2 มีโอกาสมากที่ Spring จะใช้ Javassist แทนโดยค่าเริ่มต้น

สิ่งเหล่านี้เพียงพอที่จะบอกได้หรือไม่ว่า Spring นั้นมีความสับสนกับการกำหนดค่า


1
"คนในฤดูใบไม้ผลิกำลังนำการเปลี่ยนแปลงมาสู่การตั้งค่า" - คุณช่วยยกตัวอย่างได้ไหม? ที่จะช่วยให้ผู้อ่านเข้าใจปัญหาของคุณมากขึ้นและตอบคำถามของคุณ
ริ้น

9
คำถามนั้นไม่ดีนัก แต่ชื่อนั้นตลกดี
Florian Margaine

1
@ ติดอยู่ในขั้นตอนการสอนตัวเองในฤดูใบไม้ผลิฉันไปเที่ยวรอบ ๆ และพบกับสิ่งเดียวกันที่แสดงออกในหลาย ๆ ทาง เอกสารฤดูใบไม้ผลิบอกว่าวิธีหนึ่งในการทำสิ่งต่าง ๆ บางบทช่วยสอนบอกอีกวิธีหนึ่งทั้งถูกต้องกราฟการเรียนรู้สูงมากคำถามเดียวของฉันคือ .. มีเอกสารใดที่ชัดเจนซึ่งแสดงวิธีที่เป็นไปได้ทั้งหมดในการทำสิ่งเดียว ในฤดูใบไม้ผลิ ?

1
@tito คำถามตามที่คุณระบุไว้ในความคิดเห็น "มีเอกสารใด ๆ " ฟังดูเหมือนคำขอทรัพยากร ร้องขอทรัพยากรไม่ได้ค่อนข้างต้อนรับที่โปรแกรมเมอร์ เท่าที่ฉันเข้าใจใครจะเสนอปัญหาพื้นฐานแทน (เท่าที่ฉันเห็นคุณทำแค่นั้นในข้อความคำถาม "สับสนกับการใช้") - ปัญหาที่ตั้งใจจะแก้ไขด้วยทรัพยากรเฉพาะที่ร้องขอ
ริ้น

2
@tito ฉันคิดว่าปัญหาของคุณคือการผสมผสานบทเรียนเก่ากับเอกสารใหม่ ฤดูใบไม้ผลิกลายเป็น "การประชุมเรื่องการตั้งค่า" เป็นอย่างมากซึ่งคุณไม่จำเป็นต้องแสดงให้มากเท่าที่เคยมีมา อย่างไรก็ตามบทเรียนเก่า ๆ (โดยเฉพาะอย่างยิ่ง pre-3.1) ทำสิ่งต่าง ๆ มากมายตอนนี้ไม่จำเป็น
Matsemann

คำตอบ:


5

Spring มีจุดประสงค์เพื่อให้คุณมีกรอบงานที่มี "การประชุมเรื่องการกำหนดค่า" อย่างไรก็ตามความจริงคือแอปพลิเคชั่นของสปริงต้องการการกำหนดค่าจำนวนหนึ่ง

ใน Spring 2.5.x และเวอร์ชันก่อนหน้านี้ idiom ทั่วไปจะต้องจัดเตรียมการกำหนดค่านี้ผ่าน XML ด้วย Spring 3.0+ วิธีที่ใช้สำนวนคือการใช้คำอธิบายประกอบ

ในฐานะที่เป็นหมายเหตุด้านข้างมันอาจจะเป็นเรื่องสนุก (saddening?) เพื่อดูเอนทิตี JPA ที่มีคำอธิบายประกอบมันค่อนข้างง่ายที่จะเพิ่มคำอธิบายประกอบ 4+ ลงในฟิลด์เดียว ....


ระดับของการกำหนดค่าที่ต้องการนั้นเกินกว่าความเข้าใจสำหรับนักพัฒนาที่มีเวลาน้อยเช่นฉันผู้ซึ่งต้องทำงานกับกรอบจำนวน N เพื่อทำโครงการให้สำเร็จ

1
ฉันมีวิธีการที่มีคำอธิบายประกอบสิบประการแต่ละข้อมีประโยชน์แตกต่างกัน…
Donal Fellows

1
ในทางกลับกันก็อาจเป็นไปได้ที่จะมีเอนทิตี JPA ที่มีคำอธิบายประกอบ @Entity เดียวในชั้นเรียนและไม่มีอะไรอื่น ถ้านั่นไม่ใช่การประชุมเรื่องการตั้งค่าฉันไม่รู้ว่ามันคืออะไร หากคุณรู้สึกว่าจำเป็นที่จะต้องให้ทุกอย่างทำงานอย่างที่คุณต้องการอย่าบ่นว่าคุณต้องมีการกำหนดค่ามากมาย - ดีใจที่เป็นไปได้
Michael Borgwardt

2
ฉันไม่เข้าใจว่าเพราะเหตุใด 4 คำอธิบายประกอบทำให้คุณเศร้าไฟล์ xml ที่เทียบเท่าจะมีลักษณะเป็นอย่างไร
NimChimpsky

โอ้ XML จะอยู่ไกลแย่กว่านี้ :-)
Martijn Verburg

0
<annotation-driven />

คุณต้องระบุ XML schema ที่มาจากนี้

เป็นไปได้มากที่สุดในบริบทของกลยุทธ์การจัดการธุรกรรม JPA เมื่อกำหนด Transaction Manager (ดู9.5.6 การใช้ @Transactionalในเอกสารของ Spring)

เมื่อคุณกำหนดการจัดการธุรกรรมที่ขับเคลื่อนด้วยคำอธิบายประกอบ - Spring AOP จะสร้างลักษณะโดยอัตโนมัติสำหรับวิธีการของคุณในการเริ่มต้น (หรือตรวจสอบการทำธุรกรรมที่มีอยู่) ก่อนที่จะมีการเรียกใช้เมธอดแล้วคอมมิชชัน (หรือย้อนกลับ


0

ฉันได้พบว่าการสร้าง IoC / Bean จากคำอธิบายประกอบนั้นมีประโยชน์เมื่อคุณใช้งานซิงเกิลตัน แต่อาจต้องสลับมัน

ในสถานการณ์ที่คุณอาจจำเป็นต้องนำถั่วมาใช้ซ้ำหลายครั้งด้วยคลาส / อินสแตนซ์ที่ต้องพึ่งพาต่างกัน

ในกรณีเหล่านั้นฉันประกาศถั่วในการกำหนดค่าและมักจะฉีดคอนสตรัคของสิ่งที่ฉันต้องพึ่งพา จากนั้นในชั้นเรียนที่จะใช้ถั่ว (s) ฉันพูด@Autowireแล้ว@Qualifier("")- นั่นคือวิธีที่โรงงานควรทำงาน

ซิงเกิลตันเป็นวิธีการจากโรงงานที่ให้ผลลัพธ์ 1 รายการเท่านั้น เมื่อสิ่งนี้ไม่ได้ใช้อย่างคล่องแคล่วนั่นคือเมื่อคุณจำเป็นต้องผสมมัน

สำหรับการใช้การสแกนคอมโพเนนต์กับไม่ใช่สิ่งนี้ขึ้นอยู่กับเกณฑ์ข้างต้นและการตัดสินที่ดี โดยทั่วไปฉันมีความชัดเจนมากเกี่ยวกับการสแกนส่วนประกอบแพ็คเกจ ด้วยวิธีนี้ฉันสามารถสร้างแอปพลิเคชันบริบทที่แตกต่างกันสำหรับการทดสอบที่ฉันสามารถจำลองการอ้างอิงภายนอก (เช่น db) ในขณะที่ยังคงทดสอบส่วนที่เหลือของการตั้งค่า IoC ของฉัน

นอกจากนี้ฉันไม่ได้@Componentรหัสห้องสมุดใด ๆ ในโครงการของฉัน คุณไม่มีทางรู้ว่าจะต้องใช้ถั่วในเมื่อไรและถ้าคุณใช้ถั่ว@Componentคุณอาจหยิบมันขึ้นมาในการสแกนโดยไม่ตั้งใจและคุณจะ จำกัด การนำกลับมาใช้ใหม่ สำหรับกรณีเหล่านี้โดยทั่วไปฉันมีบริบทของแอปพลิเคชันที่กำหนดไว้ในไลบรารีที่มีค่าเริ่มต้นการประกาศ bean ที่มีประโยชน์บางอย่างที่โครงการหลักของฉันสามารถรวมกับการนำเข้าลงในบริบทของแอปพลิเคชัน

ไม่มีศาสนาที่นี่ เพียงแค่ประสบการณ์ที่จะผ่าน


0

ฤดูใบไม้ผลิเสนอตัวเลือกเดิมมีเพียงสายไฟตาม xml การเดินสายตามคำอธิบายประกอบภายหลังถูกเพิ่ม
ตอนนี้เป็นไปได้ (และหลายคนทำเช่นนั้น) เพื่อใช้ทั้งสองอย่างผสมผสานกัน
มีเอกสารมากมายที่รวมอยู่ใน Spring และ / หรือดาวน์โหลดได้จากเว็บไซต์สปริงส์ มีการฝึกอบรมอย่างมืออาชีพ (ไม่เคยทำมันไม่สามารถรับรองได้) และหนังสือดีๆสักเล่ม (ฉันชอบ APress 'Pro Spring เลือกรุ่นที่ถูกต้องสำหรับเวอร์ชั่นของ Spring ที่คุณใช้)

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