0. เกี่ยวกับ AOP
การเขียนโปรแกรมเชิงมุมมอง (AOP) เป็นหัวข้อร้อนในการพัฒนาซอฟต์แวร์และเป็นส่วนสำคัญของกรอบฤดูใบไม้ผลิ ส่วนต่าง ๆ ของตรรกะทางธุรกิจสามารถแยกได้โดยใช้ AOP ซึ่งจะช่วยลดการมีเพศสัมพันธ์ระหว่างส่วนต่าง ๆ ของตรรกะทางธุรกิจการปรับปรุงความสามารถในการใช้ซ้ำของโปรแกรมและปรับปรุงประสิทธิภาพของการพัฒนา
AOP เป็นความต่อเนื่องของ OOP
ฟังก์ชั่นหลักคือ: การบันทึกสถิติประสิทธิภาพการควบคุมความปลอดภัยการประมวลผลธุรกรรมการจัดการข้อยกเว้น ฯลฯ
ความตั้งใจหลักคือการแบ่งรหัสเช่นการบันทึกสถิติประสิทธิภาพการควบคุมความปลอดภัยการประมวลผลธุรกรรมการจัดการข้อยกเว้น ฯลฯ จากรหัสตรรกะทางธุรกิจ โดยการแยกพฤติกรรมเหล่านี้เราหวังว่าจะแยกพวกเขาออกเป็นวิธีตรรกะทางธุรกิจที่ไม่นำทางแล้วเปลี่ยนพฤติกรรมเหล่านี้โดยไม่ส่งผลกระทบต่อรหัสตรรกะทางธุรกิจ
เทคโนโลยีที่เพิ่มฟังก์ชั่นให้กับโปรแกรมแบบไดนามิกโดยไม่ต้องแก้ไขซอร์สโค้ดสามารถทำได้ผ่านวิธีการ preompilation และพร็อกซ์แบบไดนามิกในระหว่างการรันไทม์ AOP เป็นความต่อเนื่องของรูปแบบการออกแบบ GOF รูปแบบการออกแบบกำลังดำเนินการแยกระหว่างผู้โทรและ Callee ปรับปรุงความยืดหยุ่นและความยืดหยุ่นของรหัส AOP สามารถกล่าวได้ว่าเป็นการดำเนินการตามเป้าหมายนี้
ให้การสนับสนุนที่หลากหลายสำหรับการเขียนโปรแกรมที่มุ่งเน้นด้านในฤดูใบไม้ผลิช่วยให้การพัฒนาที่เหนียวแน่นโดยการแยกตรรกะทางธุรกิจของแอปพลิเคชันจากบริการระดับระบบเช่นการตรวจสอบและการจัดการธุรกรรม วัตถุแอปพลิเคชันใช้สิ่งที่ควรทำเท่านั้น พวกเขาจะไม่รับผิดชอบ (หรือตระหนักถึง) ข้อกังวลระดับระบบอื่น ๆ เช่นการบันทึกหรือการสนับสนุนการทำธุรกรรม
1. โหลดไฟล์การกำหนดค่าภายนอกหรือไฟล์คุณสมบัติในฤดูใบไม้ผลิผ่าน PropertyPlaceHolderConfigurer:
ในหลายโครงการ Javaee บทบาทของฤดูใบไม้ผลิมีความสำคัญมาก มันเป็นภาชนะที่มีน้ำหนักเบาที่จัดการโมดูลและส่วนประกอบอื่น ๆ ฤดูใบไม้ผลิมักจะต้องจัดการ Struts, Ibatis, Hibernate ฯลฯ ไฟล์การกำหนดค่าของเฟรมเวิร์กโอเพ่นซอร์สเหล่านี้จะถูกโหลดในฤดูใบไม้ผลิผ่าน PropertyPlaceHolderConfigurer สำหรับการจัดการ นอกจากนี้ข้อมูลการเชื่อมต่อฐานข้อมูลไฟล์คุณสมบัติการเชื่อมต่อ JNDI ฯลฯ ยังสามารถโหลดลงในฤดูใบไม้ผลิผ่าน PropertyPlaceHolderConfigurer สำหรับการจัดการ การใช้งานมีดังนี้:
(1). โหลดไฟล์อื่น ๆ ลงในฤดูใบไม้ผลิผ่าน PropertyPlaceHolderConfigurer:
เพิ่มการกำหนดค่าต่อไปนี้ในไฟล์การกำหนดค่าสปริง:
<bean class = "org.springframework.beans.factory.config.propertyplaceholderconfigurer"> <property name = "locations"> <value> classpath: ชื่อไฟล์ที่จะโหลด </value>
(2). ไฟล์การกำหนดค่าหรือแอตทริบิวต์ที่จะโหลดผ่านการกำหนดค่าใน (1) จะถูกโหลดลงในสปริง หากคุณจำเป็นต้องใช้ข้อมูลบางอย่างเกี่ยวกับการกำหนดค่าที่โหลดหรือไฟล์ข้อมูลที่รันไทม์เช่นการใช้ข้อมูลการเชื่อมต่อฐานข้อมูลหรือข้อมูลการเชื่อมต่อ JNDI คุณสามารถใช้ไวยากรณ์ของประเภท EL Expressions เพื่ออ้างอิงเช่น:
<bean id =” DataSource” Destroy-method =” Close” class =” org.apache.common.dbcp.basicDataSource”> <!-สมมติว่าข้อมูลการเชื่อมต่อฐานข้อมูลถูกเขียนในไฟล์คุณสมบัติภายนอก value =” $ {url}”/> <property name =” ชื่อผู้ใช้” value =” $ {ชื่อผู้ใช้}”/> <ชื่อคุณสมบัติ =” รหัสผ่าน” value =” $ {รหัสผ่าน}”/> </ebean>
หมายเหตุ: คุณสามารถใช้ <บริบท: Property-PlaceHolderLocation = "classpath: ชื่อไฟล์เพื่อโหลด"/>
2. พร็อกซีแบบไดนามิกสำหรับ Java:
หลักการดำเนินการพื้นฐานของฤดูใบไม้ผลิคือพร็อกซีแบบไดนามิกดังนั้นคุณต้องเข้าใจพร็อกซีแบบไดนามิกก่อนที่จะเรียนรู้การเขียนโปรแกรมเชิงภาพ
พร็อกซีแบบไดนามิกถูกนำมาใช้กันอย่างแพร่หลายใน Java และพร็อกซีแบบไดนามิกเป็นหนึ่งในรูปแบบการออกแบบคลาสสิกที่ใช้กันทั่วไปในรูปแบบการออกแบบใน 23 หลักการของพร็อกซีแบบไดนามิกคือเมื่อวัตถุเป้าหมายหรือวิธีการเรียกใช้ระบบไม่ส่งคืนวัตถุเป้าหมาย
หลักการง่าย ๆ ของพร็อกซีแบบไดนามิกมีดังนี้:
ผู้โทรไคลเอนต์ -> วัตถุพร็อกซี -> เรียกว่าวัตถุเป้าหมาย
เมื่อลูกค้าเรียกวัตถุพร็อกซีวัตถุพร็อกซีจะมอบหมายวัตถุเป้าหมายเพื่อเรียกวิธีการทางธุรกิจ
พร็อกซีแบบไดนามิกแบ่งออกเป็นสองประเภท: พร็อกซีแบบไดนามิกสำหรับอินเทอร์เฟซและพร็อกซีแบบไดนามิกสำหรับคลาสธรรมดา พร็อกซีแบบไดนามิกใน Java เป็นพร็อกซีแบบไดนามิกสำหรับอินเทอร์เฟซจริง CGLIB เป็นพร็อกซีแบบไดนามิกสำหรับชั้นเรียนทั่วไป แพ็คเกจการพึ่งพา Javaee และแพ็คเกจ Spring Jar นั้นมีแพ็คเกจ JAR ที่เกี่ยวข้องกับ CGLIB แล้วดังนั้นคุณสามารถพร็อกซีพร็อกซีหรือคลาสธรรมดาได้
(1) พร็อกซีแบบไดนามิกของ Java สำหรับอินเทอร์เฟซ:
พร็อกซีแบบไดนามิกใน Java สามารถเป็นพร็อกซีแบบไดนามิกสำหรับอินเทอร์เฟซเท่านั้น ดังนั้นวัตถุเป้าหมายจะต้องใช้อินเทอร์เฟซและวัตถุพร็อกซีจะต้องใช้อินเทอร์เฟซทั้งหมดของวัตถุเป้าหมาย เวิร์กโฟลว์มีดังนี้:
. การเขียนระดับพร็อกซีแบบไดนามิก:
หมายเหตุ: พร็อกซีแบบไดนามิกจะต้องใช้อินเทอร์เฟซ InvocationHandler และใช้วิธีการต่อไปนี้:
การคัดลอกรหัสมีดังนี้:
Object revoke (อินสแตนซ์พร็อกซี ObjectM, อินสแตนซ์เมธอดของเมธอดอินเตอร์เฟสที่เรียกว่าในอินสแตนซ์พร็อกซีเมธอดวัตถุ [] อาร์เรย์วัตถุของค่าพารามิเตอร์ที่ส่งผ่านลงในอินสแตนซ์พร็อกซี);
มีการอธิบายเอกสารสำหรับการติดตั้ง JDK วิธีนี้ใช้ในการส่งอินสแตนซ์พร็อกซีระบุวัตถุ java.lang.reflect.method ที่เรียกวิธีการและอาร์เรย์ของประเภทวัตถุที่มีพารามิเตอร์ ตัวจัดการการโทรจัดการการเรียกใช้วิธีการเข้ารหัสในลักษณะที่เหมาะสมและผลลัพธ์ที่ส่งคืนจะถูกส่งกลับเป็นผลของการเรียกวิธีการในอินสแตนซ์พร็อกซี
ข. สร้างวัตถุพร็อกซี:
Proxy.newProxyInstance (คลาสโหลดเดอร์คลาส <?> [] อาร์เรย์อินเตอร์เฟสวัตถุพร็อกซีโทรกลับ (โดยปกติแล้ว)))
เมื่อมีการเรียกวิธีการวัตถุเป้าหมายวัตถุพร็อกซีของวัตถุเป้าหมายจะถูกสร้างขึ้นผ่านวิธีการ วัตถุพร็อกซีจะเรียกใช้เมธอด Invoke โดยอัตโนมัติเพื่อเรียกวัตถุเป้าหมายและส่งคืนผลลัพธ์การโทร
(2) .CGLIB เป็นพร็อกซีแบบไดนามิกสำหรับคลาส Java ธรรมดา:
เมื่อ CGLIB สร้างพร็อกซีแบบไดนามิกมันไม่จำเป็นต้องใช้คลาสเป้าหมายในการใช้อินเทอร์เฟซ เวิร์กโฟลว์มีดังนี้:
. การเขียนระดับพร็อกซีแบบไดนามิก:
Enhancer Enhancer = New Enhancer (); // ตั้งค่าคลาสแม่ของคลาสเป้าหมายเป็นตัวเพิ่มประสิทธิภาพของตัวเอง SetsuperClass (Target class class วัตถุ GetClass ()); // ตั้งค่าวัตถุการโทรกลับไปยังวัตถุพร็อกซีแบบไดนามิกตัวเพิ่มขึ้นเอง SetCallback (นี่);
ข. ใช้อินเทอร์เฟซ MethodInterceptor:
ใช้วิธีการต่อไปนี้:
การสกัดกั้นวัตถุ (อินสแตนซ์พร็อกซี ObjectM, อินสแตนซ์เมธอดของเมธอดอินเตอร์เฟสที่เรียกว่าในอินสแตนซ์พร็อกซีเมธอด, วัตถุ [] อาร์เรย์วัตถุของค่าพารามิเตอร์ที่ส่งผ่านไปยังวิธีการเรียกใช้ในอินสแตนซ์พร็อกซี, เมธอดเมธอดเมธอดพร็อกซีเมธอด);
หมายเหตุ: CGLIB ไม่เพียง แต่สามารถพร็อกซีแบบไดนามิกสำหรับคลาสเท่านั้น แต่ยังรวมถึงพร็อกซีแบบไดนามิกสำหรับวิธีการด้วย
3. แนวคิดพื้นฐานของการเขียนโปรแกรมเชิง (AOP):
ใช้วิธี Java ธรรมดาเป็นตัวอย่าง
ชื่อวิธีการส่งคืนสาธารณะชื่อเมธอด (รายการพารามิเตอร์) {-> วิธีการแจ้งเตือนรอบทิศทางรหัสการประมวลผลล่วงหน้า-> การแจ้งเตือนล่วงหน้าลอง {วิธีการใช้งานเฉพาะ (วิธีการร่างกาย) ... วิธีการประมวลผลโพสต์การประมวลผล-> โพสต์การแจ้งเตือน} catch (ข้อยกเว้นประเภท e) {การจัดการข้อยกเว้น ...-> การแจ้งเตือนข้อยกเว้น}
. ข้อกังวลเกี่ยวกับการตัดข้าม: ตัวอย่างเช่นในสถานที่แจ้งเตือน 5 แห่งข้างต้นในวัตถุ Java วัตถุเหล่านี้ที่มีตรรกะการประมวลผลทั่วไปที่คล้ายกันซึ่งสามารถเพิ่มลงในตรรกะการประมวลผลเช่นการตรวจสอบการอนุญาตการประมวลผลสิ่งการบันทึก ฯลฯ เรียกว่าการตัดข้าม จุดสนใจของการเขียนโปรแกรมเชิงวัตถุ (OOP) คือการทำสิ่งที่เป็นนามธรรมในแนวตั้งในโลกแห่งความเป็นจริงในรูปแบบวัตถุการเขียนโปรแกรม จุดเน้นของการเขียนโปรแกรมเชิงภาพ (AOP) เป็นแนวนอนซึ่งเป็นนามธรรมสถานที่ที่คล้ายกับตรรกะการประมวลผลในโมเดลวัตถุการเขียนโปรแกรมเพื่อสร้างแทนเจนต์ในขณะที่ตรรกะการประมวลผลในวัตถุการเขียนโปรแกรมเป็นโฟกัสแทนเจนต์แนวนอน
ข. แง่มุม: การสรุปข้อกังวลเกี่ยวกับการตัดข้ามคือการจัดตั้งส่วนซึ่งคล้ายกับชั้นเรียน ทั้งสองมีข้อกังวลที่แตกต่างกัน ชั้นเรียนเป็นนามธรรมของลักษณะของสิ่งต่าง ๆ และส่วนต่าง ๆ เป็นนามธรรมของข้อกังวลข้ามการตัดข้าม
ค. JoinPoint: จุดที่ถูกดักจับจะถูกอ้างถึงในฤดูใบไม้ผลิเนื่องจากฤดูใบไม้ผลิรองรับจุดเชื่อมต่อประเภทวิธีการเท่านั้นนั่นคือวิธีการสกัดกั้น วิธีการที่แสดงในตัวอย่างข้างต้น
d. PointCut: หมายถึงคำจำกัดความของการสกัดกั้นจุดเชื่อมต่อซึ่งเป็นชุดของจุดเชื่อมต่อนั่นคือชุดของชุดของวิธีการที่สกัดกั้น
ก. คำแนะนำ: หมายถึงสิ่งที่ต้องทำหลังจากสกัดกั้นจุดเชื่อมต่อนั่นคือการประมวลผลเชิงตรรกะหลังจากการสกัดกั้น การตรวจสอบการอนุญาตตามปกติการประมวลผลสิ่งการบันทึกและการดำเนินการอื่น ๆ จะถูกกำหนดและเสร็จสิ้นในการแจ้งเตือน
f. เป้าหมาย: วัตถุเป้าหมายของพร็อกซีนั่นคือวัตถุที่สกัดกั้น ดังในตัวอย่างข้างต้นวัตถุที่มีวิธีการอยู่
กรัม สาน: หมายถึงกระบวนการใช้ส่วนกับวัตถุเป้าหมายและทำให้เกิดการสร้างวัตถุพร็อกซี
ชม. บทนำ: โดยไม่ต้องแก้ไขรหัสการแนะนำสามารถเพิ่มวิธีการและฟิลด์บางอย่างแบบไดนามิกในคลาสระหว่างการรันไทม์
4. สปริงรองรับการพึ่งพาการอ้างอิงที่สนับสนุนการเขียนโปรแกรมเชิง (AOP):
3 แพ็คเกจต่อไปนี้ในไดเรกทอรีหลังจากสปริงถูกบีบอัด:
lib/appectj/apperixjweaver.jarlib/apperiallsj/apperitjrt.jarlib/cglib/cglib-nodep-2.1-3.jar
5. เมื่อใช้การเขียนโปรแกรมเชิงภาพ (AOP) ในฤดูใบไม้ผลิคุณต้องแนะนำ NAMESPACE AOP ในไฟล์การกำหนดค่าสปริงนั่นคือเพิ่มการกำหนดค่าต่อไปนี้:
XMLNS: AOP =” http://www.springframework.org/schema/aop”“ http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/aop/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd”
หมายเหตุ: Spring 2.5 มีวิธี AOP สองวิธีคือขึ้นอยู่กับไฟล์การกำหนดค่า XML และวิธีการอธิบายประกอบ Java
ในการใช้วิธีการเพิ่มความสามารถ AOP คุณต้องเพิ่มวิธีการเพิ่มความคิดเห็นของวัตถุต่อไปนี้ AOP ในไฟล์การกำหนดค่าสปริง:
<AOP: ASPECTJ-AUTOPROXY/>>>
6. คลาสบรรจุภัณฑ์ Javabean - Beanwrapper:
ฤดูใบไม้ผลิห่อหุ้มพฤติกรรมของ javabean ผ่านคลาส Beanwrapper และสามารถตั้งค่าและรับค่าแอตทริบิวต์ของมันเช่น:
beanwrapper wrapper class class = beanwrapperimpl (คลาสใหม่ห่อ ()); Wrapper Class Object.SetPropertyValue ("ชื่อคุณสมบัติ", "ค่าคุณสมบัติ");
วิธีนี้ช่วยให้คุณสามารถตั้งค่าคุณสมบัติเป็นคลาสที่ห่อหุ้มได้
7. การพัฒนาโปรแกรมเชิงเส้น (AOP) ตามคำอธิบายประกอบ:
(1). เพิ่มการสนับสนุน AOP สำหรับวิธีการเพิ่มความคิดเห็นในไฟล์การกำหนดค่าสปริง
(2). กำหนดส่วน:
คล้ายกับการสร้างคลาสปกติการเพิ่มคำอธิบายประกอบ "@aspect" ก่อนที่คลาสจะระบุว่าคลาสเป็นส่วน
(3). เพิ่มจุดเข้าสู่พื้นผิวที่ถูกตัด:
จุดตัดจุดคือการรวบรวมวิธีการที่ถูกสกัดกั้น โดยปกติแล้วจุดตัดจุดจะถูกกำหนดไว้ในวิธีการประมวลผลจุดตัดจุดในส่วน ใช้คำอธิบายประกอบ "@pointcut" และไวยากรณ์มีดังนี้:
@PointCut ("Execution (*com.test.service ..*.*(.. ))") โมฆะสาธารณะ anyMethod () {// วิธีนี้เรียกว่า "จุดตัด" และ "จุดตัด" การประมวลผล}
คำอธิบายโดยละเอียดของพารามิเตอร์ไวยากรณ์:
. ครั้งแรก "*": หมายความว่าวิธีการที่ถูกดักจับเป็นประเภทการส่งคืนโดยพลการ
ข. com.test.service: นี่คือตัวอย่างง่ายๆที่ระบุชื่อของแพ็คเกจที่จะสกัดกั้นนั่นคือแพ็กเก็ตที่จะสกัดกั้น
ค. ทั้งสอง ".. " หลังจากชื่อแพ็คเก็ตที่สกัดกั้น: หมายความว่าแพ็คเก็ตย่อยด้านล่างแพ็กเก็ตที่สกัดกั้นจะถูกสกัดกั้นซ้ำ ๆ นั่นคือแพ็คเก็ตย่อยที่สกัดกั้น
d. "*" หลังจาก ".. ": หมายถึงคลาสทั้งหมดที่อยู่ใต้แพ็กเก็ตที่สกัดกั้นและแพ็คเกจย่อยนั่นคือคลาสที่สกัดกั้น
ก. สุดท้าย "*": แสดงถึงวิธีการทั้งหมดในคลาสที่สกัดกั้นนั่นคือวิธีการที่สกัดกั้น
f. "(.. )": หมายความว่าวิธีการที่สกัดกั้นจะได้รับพารามิเตอร์ใด ๆ นั่นคือพารามิเตอร์ที่สกัดกั้น
หมายเหตุ: ไวยากรณ์คำจำกัดความแบบจุดสามารถรองรับอักขระไวด์การ์ดได้ แต่คุณต้องปฏิบัติตามกฎไวยากรณ์อย่างเคร่งครัด ชอบ:
@PointCut ("Execution (*com.test.service ..*. เพิ่ม*(.. ))") มันหมายถึงวิธีการสกัดกั้นเริ่มต้นด้วย "เพิ่ม" ในทุกคลาสภายใต้แพ็คเกจ com.test.service และแพคเกจย่อย
(4). เพิ่มการแจ้งเตือนในส่วน:
สำหรับสถานที่แจ้งเตือนในฤดูใบไม้ผลิโปรดดูตัวอย่างเล็ก ๆ ใน 3
"@Before" คำอธิบายประกอบ: ประกาศการแจ้งเตือนล่วงหน้า
"@afterrutruning" คำอธิบายประกอบ: ประกาศโพสต์การแจ้งเตือน
"@After" คำอธิบายประกอบ: ประกาศประกาศขั้นสุดท้าย
"@afterthrowing" คำอธิบายประกอบ: ประกาศการแจ้งเตือนข้อยกเว้น
"@around" คำอธิบายประกอบ: ประกาศการแจ้งเตือนโดยรอบ
ตัวอย่างของการกำหนดการแจ้งเตือนมีดังนี้:
@Before ("AnyMethod () (ชื่อจุดเริ่มต้นที่ประกาศไว้ในหน้าร่อง)") โมฆะสาธารณะ doaccesscheck () {... }
หมายเหตุ: การแจ้งเตือนรอบทิศทางนั้นแตกต่างจากการแจ้งเตือนอื่น ๆ อีก 4 ประเภท การแจ้งเตือนรอบทิศทางถูกกำหนดด้วยวิธีพิเศษ การแจ้งเตือนรอบทิศทางจะทำงานก่อนและหลังการเรียกใช้วิธีทั้งหมดดังนั้นวัตถุจุดเชื่อมต่อจะต้องใช้เพื่อบอกจุดเชื่อมต่อเพื่อดำเนินการประมวลผลเชิงตรรกะต่อไปหลังจากการประมวลผลการแจ้งเตือนรอบทิศทาง คำจำกัดความของมันมีดังนี้:
@Around (ค้นหาชื่อจุด) วัตถุสาธารณะ DobasicProfiling (proderingJoinPoint PJP) โยน throwable {... ส่งคืน pjp.proceed (); // ประโยคนี้บอกจุดเชื่อมต่อเพื่อดำเนินการอื่น ๆ 8. เคล็ดลับบางประการสำหรับการพัฒนาการเขียนโปรแกรมเชิงภาพ (AOP) ตามคำอธิบายประกอบ:
(1). รับพารามิเตอร์อินพุต:
ชอบ:
@Before ("ลงทะเบียนชื่อ dot && args (ชื่อพารามิเตอร์อินพุต)") โมฆะสาธารณะ dosomething (ชื่อพารามิเตอร์อินพุตสตริง) {... }
(2). รับผลตอบแทน:
ชอบ:
@afterReturning (pointcut =” ลงชื่อเข้าใช้ชื่อจุด”, return =” ชื่อผลลัพธ์กลับ”) โมฆะสาธารณะ dosomething (ชื่อผลลัพธ์สตริง) {…}
9. การพัฒนาการเขียนโปรแกรมที่มุ่งเน้นส่วน (AOP) ตาม XML:
(1). กำหนดคลาส FaceT และเพิ่มการแจ้งเตือนในคลาส FaceT
(2). กำหนดค่าคลาส FACET ในไฟล์การกำหนดค่าสปริงเช่นคลาส Java ธรรมดา
(3). เพิ่มการกำหนดค่า AOP ในไฟล์การกำหนดค่าสปริงดังต่อไปนี้:
<AOP: config> <!-ส่วนการกำหนดค่า-> <aop: iscy id = "ส่วน id" ref = "id ของคลาสส่วนในไฟล์การกำหนดค่าสปริง"> <!-จุดการกำหนดค่า-> <aop: pointcut id = "id id" การกำหนดค่า (com.test.service ..*.*(.. ) " วิธีการประมวลผลในคลาสส่วน "/> <aop: หลังจาก .../> ... </aop: แง่มุม> </aop: config>
10. การประมวลผลธุรกรรมของสปริง (การประมวลผลธุรกรรมการประกาศของฤดูใบไม้ผลิ):
พูดง่ายๆคือการทำธุรกรรมหมายถึงหนึ่งในการดำเนินการขั้นพื้นฐานที่สุดในฐานข้อมูล คำอธิบายโดยละเอียดของการทำธุรกรรมจะถูกอธิบายโดยละเอียดในบทสรุปที่เกี่ยวข้องกับฐานข้อมูล หนึ่งในแอพพลิเคชั่นที่สำคัญที่สุดของการเขียนโปรแกรมเชิงพื้นที่ของฤดูใบไม้ผลิ (AOP) คือการจัดการธุรกรรม การจัดการธุรกรรมของ Spring 2.5 และรุ่นใหม่กว่านั้นรองรับวิธีการเพิ่มความคิดเห็นสองประเภทและวิธีการที่ใช้ไฟล์ XML:
(1). การจัดการธุรกรรมตามวิธีการเพิ่มความคิดเห็น:
. เพิ่มเนมสเปซการจัดการธุรกรรมในไฟล์กำหนดค่าสปริงดังนี้:
xmlns: ts = http: //www.springframework.org/schema/tx http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/tx/spring
ข. กำหนดค่าตัวจัดการธุรกรรมในไฟล์การกำหนดค่าสปริงดังต่อไปนี้:
<bean id =” txManager” class =” org.springframework.jdbc.datasource.datasourceTransactionmang
ค. เพิ่มรายการการกำหนดค่าธุรกรรมที่รองรับวิธีการอธิบายประกอบในไฟล์การกำหนดค่าสปริงมีดังนี้:
<TX: คำอธิบายประกอบ-DriventRansaction-Manager-TX: คำอธิบายประกอบ-DriventRansaction-Manager =” txManager (ID ของตัวจัดการธุรกรรมถั่วที่กำหนดค่าในฤดูใบไม้ผลิ)”/>
d. ใช้การจัดการธุรกรรมตามคำอธิบายประกอบ:
ในโครงการ Javaee ที่จัดการโดยฤดูใบไม้ผลิตรรกะทางธุรกิจของการทำธุรกรรมจะต้องเพิ่มด้วยคำอธิบายประกอบ "@transactional"
(2). การจัดการธุรกรรมโดยใช้วิธีไฟล์ XML:
. กำหนดค่าตัวจัดการธุรกรรมในไฟล์การกำหนดค่าสปริงดังต่อไปนี้:
<bean id =” txManager” class =” org.springframework.jdbc.datasource.datasourceTransactionmang
ข. เพิ่มส่วนต่อไปนี้ของการจัดการสิ่งของในไฟล์กำหนดค่าฤดูใบไม้ผลิ:
<AOP: config> <!-กำหนดค่าจุดเข้าทำธุรกรรม-> <aop: pointcut id =” transactionpointcut” expression =” การดำเนินการ (*com.test.service ..*.*(.. ))”/> <!ค. เพิ่มคุณสมบัติต่อไปนี้สำหรับการแจ้งเตือนการทำธุรกรรมในไฟล์การกำหนดค่าสปริง:
<tx: คำแนะนำ id =” txadvice” transactionManager =” txManager”> <tx: คุณลักษณะ> <!-นี่คือตัวอย่างที่จะตั้งค่าวิธีการสอบถามเริ่มต้นด้วยการอ่านอย่างเดียวและไม่สนับสนุนการทำธุรกรรม-> <tx: วิธีการอื่น ๆ name =”*”/> </tx: แอตทริบิวต์> </tx: คำแนะนำ>