ฉันค่อนข้างใหม่สำหรับ Spring ฉันมีคำถามเกี่ยวกับการใส่คำอธิบายประกอบชั้นเรียน เมื่อใส่คำอธิบายประกอบคลาสด้วย@Component
หมายความว่าคลาสนี้จะเป็น Spring Bean และโดยค่าเริ่มต้นเป็นซิงเกิลตันหรือไม่
ฉันค่อนข้างใหม่สำหรับ Spring ฉันมีคำถามเกี่ยวกับการใส่คำอธิบายประกอบชั้นเรียน เมื่อใส่คำอธิบายประกอบคลาสด้วย@Component
หมายความว่าคลาสนี้จะเป็น Spring Bean และโดยค่าเริ่มต้นเป็นซิงเกิลตันหรือไม่
คำตอบ:
ใช่ถูกต้อง@Component
คือ Spring bean และ Singleton
หากชั้นเรียนเป็นของชั้นบริการคุณอาจต้องการใส่คำอธิบายประกอบด้วย @Service
แทน
แต่โปรดทราบว่าเพื่อให้ตรวจพบคำอธิบายประกอบเหล่านี้คุณต้องวางบรรทัดนี้ไว้ในapplicationContext.xml
:
<context:component-scan base-package="com.yourcompany" />
เกี่ยวกับเสื้อกล้าม - ถั่วสปริงล้วนอยู่ในขอบเขตซิงเกิลตันตามค่าเริ่มต้น สิ่งเดียวที่คุณต้องจำไว้คือคุณไม่ควรเก็บ state ไว้ในตัวแปรฟิลด์ (ควรมีการอ้างอิงเท่านั้น) ดังนั้นแอปพลิเคชันของคุณจะปลอดภัยต่อเธรดและคุณไม่ต้องการอินสแตนซ์ใหม่ของถั่วทุกครั้ง กล่าวอีกนัยหนึ่งถั่วของคุณไร้สัญชาติ
โดยค่าเริ่มต้น - ใช่
อย่างไรก็ตามคุณสามารถลบล้างพฤติกรรมนี้ได้โดยใช้@Scope
คำอธิบายประกอบ ตัวอย่างเช่น:@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)