ใช้คำอธิบายประกอบเพื่อสร้างคอนเทนเนอร์ IOC
ใช้คำอธิบายประกอบเพื่อลงทะเบียนถั่วด้วยภาชนะฤดูใบไม้ผลิ จำเป็นต้องลงทะเบียนใน ApplicationContext.xml <บริบท: Component-Scan base-base-package =” pagkage1 [, pagkage2, …, pagkagen]”/>
ตัวอย่างเช่น: ระบุแพ็คเกจในแพคเกจฐาน
<บริบท: Component-Scan base-package = "cn.gacl.java"/>> >>
บ่งชี้ว่าหากคลาสมีคำอธิบายประกอบเฉพาะ [@component/@repository/@service/@controller] ในแพ็คเกจ cn.gacl.java และแพ็คเกจย่อยวัตถุนี้จะถูกลงทะเบียนในภาชนะสปริงเป็นถั่ว นอกจากนี้คุณยังสามารถระบุหลายแพ็คเกจใน <บริบท: Component-Scan base-package = ""/> เช่น:
<บริบท: Component-Scan base-package = "cn.gacl.dao.impl, cn.gacl.service.impl, cn.gacl.action"/> >>
หลายแพ็คเกจถูกคั่นด้วยเครื่องหมายจุลภาค
1. @component
@ส่วนประกอบ
มันเป็นรูปแบบทั่วไปสำหรับส่วนประกอบที่มีการจัดการสปริงทั้งหมด คำอธิบายประกอบ @component สามารถวางไว้บนหัวของชั้นเรียนและไม่แนะนำให้ใช้ @component
2. @Controller
@Controller สอดคล้องกับถั่วของเลเยอร์การนำเสนอนั่นคือการกระทำเช่น:
@Controller @Scope ("Prototype") ผู้ใช้ระดับสาธารณะขยาย Baseaction <ผู้ใช้> {... }หลังจากใช้คำอธิบายประกอบ @Controller เพื่อระบุการทำกิจกรรมแล้วหมายความว่าการทำปฏิกิริยาจะถูกส่งไปยังคอนเทนเนอร์สปริงสำหรับการจัดการ จะมีการกระทำที่ชื่อ "useraction" ในคอนเทนเนอร์ฤดูใบไม้ผลิ ชื่อนี้ใช้ตามชื่อคลาส UserAction หมายเหตุ: หาก @Controller ไม่ได้ระบุค่า【 @Controller 】ชื่อถั่วเริ่มต้นเป็นตัวพิมพ์เล็กในตัวอักษรตัวแรกของชื่อคลาส หากคุณระบุค่า【 @controller (value = "useraction") 】หรือ【 @controller ("useraction") 】จากนั้นใช้ค่าเป็นชื่อของถั่ว
useraction ที่นี่ยังใช้คำอธิบายประกอบ @Scope @Scope ("ต้นแบบ") หมายความว่าขอบเขตของการกระทำนั้นถูกประกาศว่าเป็นต้นแบบ คุณสามารถใช้ขอบเขต = "ต้นแบบ" ของคอนเทนเนอร์เพื่อให้แน่ใจว่าแต่ละคำขอมีการดำเนินการแยกต่างหากเพื่อจัดการเพื่อหลีกเลี่ยงปัญหาความปลอดภัยของเธรดในการดำเนินการใน struts สปริงขอบเขตเริ่มต้นคือโหมดซิงเกิลตัน (scope = "Singleton") ซึ่งจะสร้างวัตถุแอ็คชั่นเท่านั้น การเข้าถึงแต่ละครั้งเป็นวัตถุการกระทำเดียวกัน ข้อมูลไม่ปลอดภัย Struts2 ต้องการให้การเข้าถึงแต่ละครั้งสอดคล้องกับการกระทำที่แตกต่างกัน Prope = "Prototype" สามารถมั่นใจได้ว่าวัตถุการกระทำถูกสร้างขึ้นเมื่อมีการร้องขอ
3. @ บริการ
@Service สอดคล้องกับถั่วชั้นบริการตัวอย่างเช่น:
@Service ("Userservice") Public Class UserserViceImpl ใช้ UserserVice {……}@Service ("Userservice") คำอธิบายประกอบบอกสปริงว่าเมื่อฤดูใบไม้ผลิต้องการสร้างอินสแตนซ์ของ UserserViceImpl ชื่อถั่วจะต้องเรียกว่า "Userservice" ด้วยวิธีนี้เมื่อการกระทำจำเป็นต้องใช้อินสแตนซ์ของ UserserViceImpl "ผู้ใช้" ที่สร้างขึ้นโดยฤดูใบไม้ผลิสามารถถูกฉีดลงในการปฏิบัติ: ในการดำเนินการคุณต้องประกาศตัวแปรที่ชื่อ "ผู้ใช้" เพื่อรับ "ผู้ใช้" รหัสเฉพาะมีดังนี้:
// ฉีด Userservice @Resource (name = "userservice") ผู้ใช้บริการส่วนตัวผู้ใช้บริการ;
หมายเหตุ: ประเภทของตัวแปร "ผู้ใช้" ที่ประกาศไว้ในการกระทำจะต้องเป็น "userserviceimpl" หรือคลาสแม่ "ผู้ใช้" มิฉะนั้นจะไม่สามารถฉีดได้เนื่องจากประเภทที่ไม่สอดคล้องกัน เนื่องจากตัวแปร "Userservice" ที่ประกาศในการดำเนินการใช้คำอธิบายประกอบ @Resource และระบุชื่อ = "Userservice" ซึ่งเทียบเท่ากับการบอกฤดูใบไม้ผลิว่าฉันต้องการสร้างอินสแตนซ์ "ผู้ใช้" ฤดูใบไม้ผลิจะช่วยฉันทำอินสแตนซ์อย่างรวดเร็วแล้วมอบให้ฉัน เมื่อฤดูใบไม้ผลิเห็นคำอธิบายประกอบ @Resource บนตัวแปร Userservice ตามแอตทริบิวต์ชื่อที่ระบุคุณสามารถรู้ได้ว่าต้องใช้อินสแตนซ์ของ UserserViceImpl ในการดำเนินการ ในเวลานี้ฤดูใบไม้ผลิจะฉีดอินสแตนซ์ของ UserserViceImpl ที่เรียกว่า "Userservice" ลงในตัวแปร "Userservice" ในการดำเนินการเพื่อช่วยให้การดำเนินการสร้างอินสแตนซ์ของ Userservice เสร็จสิ้นดังนั้นในการดำเนินการจึงไม่จำเป็นต้องใช้ "ผู้ใช้ userservice = ผู้ใช้ใหม่ นี่เป็นวิธีดั้งเดิมที่สุดในการสร้างอินสแตนซ์ Userservice
หากไม่มีฤดูใบไม้ผลิเมื่อการกระทำจำเป็นต้องใช้ UserserViceImpl คุณต้องสร้างวัตถุอินสแตนซ์อย่างแข็งขันผ่าน "ผู้ใช้ userservice userservice = ใหม่ userserViceImpl ();" อย่างไรก็ตามหลังจากใช้ฤดูใบไม้ผลิเมื่อการกระทำต้องการใช้ UserserViceImpl คุณไม่จำเป็นต้องสร้างอินสแตนซ์ของ UserserViceImpl อย่างแข็งขัน การสร้างอินสแตนซ์ UserserViceImpl ได้รับการส่งมอบให้กับฤดูใบไม้ผลิ ฤดูใบไม้ผลิให้อินสแตนซ์ UserserViceImpl ที่สร้างขึ้นกับการกระทำและคุณสามารถใช้งานได้โดยตรงหลังจากที่คุณได้รับการดำเนินการ
การกระทำสามารถใช้งานได้ทันทีหลังจากสร้างอินสแตนซ์ UserserViceImpl อย่างแข็งขัน แต่จะต้องรอสปริงอย่างอดทนเพื่อสร้างอินสแตนซ์ UserserViceImpl ก่อนที่จะฉีดเข้าสู่การดำเนินการ
สิ่งนี้แสดงให้เห็นว่า "การควบคุม" ของแอ็คชั่นผ่านคลาส "UserserViceImpl" ได้รับการ "กลับรายการ" ปรากฎว่าความคิดริเริ่มอยู่ในมือของฉันเอง ฉันต้องใช้อินสแตนซ์คลาส "UserserViceImpl" ฉันสามารถใช้ความคิดริเริ่มเพื่อใช้งานได้ทันที แต่ตอนนี้ฉันไม่สามารถใช้ความคิดริเริ่มไปสู่อินสแตนซ์ใหม่ของอินสแตนซ์คลาส "UserserViceImpl" ได้ พลังของอินสแตนซ์คลาส "UserserViceImpl" ใหม่ได้ถูกนำออกไปในฤดูใบไม้ผลิ เพียงสปริงเท่านั้นอินสแตนซ์ใหม่ของอินสแตนซ์ "UserserViceImpl" และการกระทำเท่านั้นที่สามารถรอให้ฤดูใบไม้ผลิสร้างคลาส "USERSE" หลังจากอินสแตนซ์ของ RVICEIMPL "คลาส" ได้โปรด "สปริงให้อินสแตนซ์ที่สร้างขึ้นของคลาส" UserserViceImpl "เพื่อให้สามารถใช้" ผู้ใช้ UserserviceImpl ทำงานได้ดังนั้นมันจึงสร้างการพึ่งพาผู้ใช้บริการ
4. @ repository
@Repository สอดคล้องกับถั่วเลเยอร์การเข้าถึงข้อมูลตัวอย่างเช่น:
@Repository (value = "userDao") คลาสสาธารณะ UserDaoimpl ขยาย AffleAoImpl <user> {………}คำอธิบายประกอบ @repository (value = "userdao") บอกให้สปริงปล่อยให้สปริงสร้างอินสแตนซ์ userdaoimpl ชื่อ "userdao"
เมื่อบริการจำเป็นต้องใช้อินสแตนซ์ UserDaoImpl ชื่อ "UserDao" ที่สร้างขึ้นโดยฤดูใบไม้ผลิคุณสามารถใช้คำอธิบายประกอบ @Resource (name = "UserDao") เพื่อบอกสปริงและสปริงสามารถฉีด UserDao ที่สร้างขึ้นลงในบริการ
// ฉีด UserDao และเมื่อนำผู้ใช้ที่ระบุจากฐานข้อมูลตามรหัสผู้ใช้คุณต้องใช้ @Resource (name = "userDao") Private Achedao <erer> UserDao;
@Resource, @Autowired และ @qualifier ล้วนใช้ในการฉีดวัตถุ ในหมู่พวกเขา @Resource สามารถฉีดในชื่อหรือประเภท @Autowired สามารถฉีดเป็นประเภทเท่านั้นและ @qualifier สามารถฉีดได้ในชื่อเท่านั้น
แต่พวกเขามีความแตกต่างเล็กน้อย:
1. @Resource และ @qualifier จะถูกฉีดโดยอัตโนมัติโดย Byname โดยค่าเริ่มต้นและ @autowired จะถูกฉีดโดยอัตโนมัติโดย Bytype โดยค่าเริ่มต้น
2. @Resource มีคุณสมบัติสองประการที่สำคัญกว่าชื่อและประเภท หากใช้แอตทริบิวต์ชื่อจะใช้นโยบายการฉีดอัตโนมัติของ ByName เมื่อใช้แอตทริบิวต์ประเภทจะใช้นโยบายการฉีดอัตโนมัติ ByType
3. @Resources เป็นคำอธิบายประกอบที่จัดทำโดย JDK ในขณะที่ @Autowired เป็นคำอธิบายประกอบที่จัดทำโดยฤดูใบไม้ผลิ
คุณสามารถปฏิบัติต่อ @Resource ในฐานะเจ้านายของ @autowired @qualifier, ฮ่าฮ่า ฉันมีสิ่งที่คุณมีและฉันมีสิ่งที่คุณไม่มีและฉันก็มีเช่นกัน ~
@Resource, @Autowired และ @qualifier ล้วนใช้ในการฉีดวัตถุ ในหมู่พวกเขา @Resource สามารถฉีดในชื่อหรือประเภท @Autowired สามารถฉีดเป็นประเภทเท่านั้นและ @qualifier สามารถฉีดได้ในชื่อเท่านั้น
แต่พวกเขามีความแตกต่างเล็กน้อย:
1. @Resource และ @qualifier จะถูกฉีดโดยอัตโนมัติโดย Byname โดยค่าเริ่มต้นและ @autowired จะถูกฉีดโดยอัตโนมัติโดย Bytype โดยค่าเริ่มต้น
2. @Resource มีคุณสมบัติสองประการที่สำคัญกว่าชื่อและประเภท หากใช้แอตทริบิวต์ชื่อจะใช้นโยบายการฉีดอัตโนมัติของ ByName เมื่อใช้แอตทริบิวต์ประเภทจะใช้นโยบายการฉีดอัตโนมัติ ByType
3. @Resources เป็นคำอธิบายประกอบที่จัดทำโดย JDK ในขณะที่ @Autowired เป็นคำอธิบายประกอบที่จัดทำโดยฤดูใบไม้ผลิ
คุณสามารถปฏิบัติต่อ @Resource ในฐานะเจ้านายของ @autowired @qualifier, ฮ่าฮ่า ฉันมีสิ่งที่คุณมีและฉันมีสิ่งที่คุณไม่มีและฉันก็มีเช่นกัน ~
คำอธิบายประกอบสปริงทั่วไปข้างต้นวิธีการใช้คำอธิบายประกอบเพื่อสร้างคอนเทนเนอร์ IOC เป็นเนื้อหาทั้งหมดที่ฉันได้แบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น