ฉันค่อนข้างใหม่สำหรับ 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)