AspectJ อธิบายการแทนเจนต์และการปรับปรุงผ่านคำอธิบายประกอบ
1 ข้อกำหนดด้านสภาพแวดล้อมการพัฒนา
เนื่องจากคุณต้องการใช้คำอธิบายประกอบให้แน่ใจว่าคุณใช้ Java 5.0 ขึ้นไป
แนะนำ Library Class ที่เกี่ยวข้องกับ AspectJ:
<การพึ่งพา> <roupId> org.aspectj </groupId> <ratifactId> APPERTIONJRT </artIfactId> <Sersion> $ {ASPASTJ.VERSION} </เวอร์ชัน> </การพึ่งพาอาศัย> <การพึ่งพา> <Sersion> $ {APPAINTJ.Version} </เวอร์ชัน> </การพึ่งพา> <การพึ่งพา> <roupId> org.aspectj </groupId> <sertifactid> appectjtools </artifactid> <persion> $ {spectionj.version} </เวอร์ชัน> <cersion> $ {APPERTIONJ.VERSION} </เวอร์ชัน> </การพึ่งพา> <การพึ่งพา> <roupId> AOPALLIANCE </groupId> <ArtIfactId> AOPALLIANCE </ArtIfactId> <Sersion> $ {AOPALLIANCE.Version 2 วิธีการเขียนโปรแกรม
@Aspect // Login Facets
ระดับสาธารณะ PRERENTASPECT {/*** การปรับปรุงตรรกะ*/@Before ("การดำเนินการ (* เช่า (.. ))") // กำหนดประเภทแทนเจนต์และประเภทการปรับปรุงโมฆะสาธารณะ beForerent () {system.out.println ("เริ่มดำเนินการเช่า"); -ส่วนนี้เป็นเพียง pojo ธรรมดา แต่มีการเพิ่มคำอธิบายประกอบ @aspect
@Before("execution(* rent(..))") หมายความว่าประเภท @Before เป็นการปรับปรุงที่ได้รับการปรับปรุงล่วงหน้าและเนื้อหาของมันคือการแสดงออก @AspectJ point-cut ที่นี่หมายความว่าการปรับปรุงนั้นทอบนวิธีการเช่า () ของคลาสเป้าหมาย RENT () สามารถมีพารามิเตอร์ที่เข้ามาและค่าคืนใด ๆ
มันไม่สะดวกมากสำหรับชั้นเรียนที่มี @Aspect เพื่อรวมจุดแทนเจนต์ประเภทการปรับปรุงและตรรกะการตัดข้ามผ่านคำอธิบายประกอบและรหัสหรือไม่? o (∩_∩) โอฮ่าฮ่า ~
การทดสอบหน่วย:
APPERINTJPROXYFACTORY Factory = NEWASSIONJPROXYFACTORY (); // ตั้งค่าโรงงานคลาสเป้าหมาย SETTARGET (ผู้ใช้ใหม่ ()); // เพิ่ม Facet Class Factory.AddAspect (PRERENTASPECT.CLASS); ผู้ใช้ proxy = Factory.getProxy ()
ผลลัพธ์ผลลัพธ์:
-เริ่มต้นการดำเนินการเช่า-
ผู้ใช้: เช่า [Power Bank]
ผู้ใช้: return [Power Bank]
3 วิธีการกำหนดค่า
<!-คลาสเป้าหมาย-> <bean id = "ผู้ใช้"/> <!-คลาส Face-> <bean/> <!-สร้างเอเจนต์โดยอัตโนมัติ-> <bean/>
การทดสอบหน่วย:
ApplicationContext Context = ใหม่ classPathxMlApplicationContext (spring.xml "); ผู้ใช้ผู้ใช้ = (ผู้ใช้) บริบท. getBean (" ผู้ใช้ "); string userId =" 001 "; user.rent (userId); user.back (userId);เอาต์พุตเหมือนกับโปรแกรม
นอกจากนี้ยังสามารถกำหนดค่าตามเนมสเปซ AOP ของ Schema:
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://ww.w3.org/2001/xml xmlns: aop = "http://www.springframework.org/schema/aop" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework ไดรฟ์-> <AOP: ASPASTJ-AUTOPROXY/> <!-คลาสเป้าหมาย-> <bean id = "ผู้ใช้"/> <!-Face Class-> <Bean/> </ebeans>
การกำหนดค่านี้ง่ายกว่า ในความเป็นจริงโหมดพร็อกซีอัตโนมัติได้ถูกนำมาใช้ภายใน <aop:aspectj-atuoproxy/> o (∩_∩) o ฮ่าฮ่า ~
proxy-target-class ของ <aop:aspectj-atuoproxy/> เป็นเท็จโดยค่าเริ่มต้นแสดงให้เห็นว่าการปรับปรุงถูกทอโดยใช้เทคโนโลยีพร็อกซีไดนามิก JDK; หากค่านี้เป็นจริงแสดงว่าการปรับปรุงนั้นทอโดยใช้เทคโนโลยีพร็อกซีแบบไดนามิก CGLIB หากคลาสเป้าหมายไม่ได้ประกาศอินเทอร์เฟซแม้ว่า proxy-target-class ถูกตั้งค่าเป็นเท็จการปรับปรุง yo o o (∩_∩) o ฮ่าฮ่า ~
สำหรับโครงการที่ใช้ Java 5.0+ ขอแนะนำให้ใช้ APISTICJ เพื่อกำหนดค่าการตัดจุดและการปรับปรุงเนื่องจากมันง่ายกว่าและโดยตรงมากขึ้น
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น