อาจจะช้า แต่ฉันเจอสิ่งที่อธิบายข้อกังวลของคุณที่เกี่ยวข้องกับพร็อกซี (เฉพาะการเรียกใช้เมธอด 'ภายนอก' ที่เข้ามาทางพร็อกซีจะถูกดัก) อย่างดี
ตัวอย่างเช่นคุณมีคลาสที่มีลักษณะเช่นนี้
@Component("mySubordinate")
public class CoreBusinessSubordinate {
public void doSomethingBig() {
System.out.println("I did something small");
}
public void doSomethingSmall(int x){
System.out.println("I also do something small but with an int");
}
}
และคุณมีแง่มุมที่มีลักษณะเช่นนี้:
@Component
@Aspect
public class CrossCuttingConcern {
@Before("execution(* com.intertech.CoreBusinessSubordinate.*(..))")
public void doCrossCutStuff(){
System.out.println("Doing the cross cutting concern now");
}
}
เมื่อคุณดำเนินการเช่นนี้:
@Service
public class CoreBusinessKickOff {
@Autowired
CoreBusinessSubordinate subordinate;
// getter/setters
public void kickOff() {
System.out.println("I do something big");
subordinate.doSomethingBig();
subordinate.doSomethingSmall(4);
}
}
ผลลัพธ์ของการโทร kickOff ด้านบนให้รหัสด้านบน
I do something big
Doing the cross cutting concern now
I did something small
Doing the cross cutting concern now
I also do something small but with an int
แต่เมื่อคุณเปลี่ยนรหัสเป็น
@Component("mySubordinate")
public class CoreBusinessSubordinate {
public void doSomethingBig() {
System.out.println("I did something small");
doSomethingSmall(4);
}
public void doSomethingSmall(int x){
System.out.println("I also do something small but with an int");
}
}
public void kickOff() {
System.out.println("I do something big");
subordinate.doSomethingBig();
//subordinate.doSomethingSmall(4);
}
คุณจะเห็นวิธีการภายในเรียกวิธีอื่นภายในเพื่อที่จะไม่ถูกดักและเอาท์พุทจะมีลักษณะเช่นนี้:
I do something big
Doing the cross cutting concern now
I did something small
I also do something small but with an int
คุณสามารถทำสิ่งนี้ได้โดยทำสิ่งนั้น
public void doSomethingBig() {
System.out.println("I did something small");
//doSomethingSmall(4);
((CoreBusinessSubordinate) AopContext.currentProxy()).doSomethingSmall(4);
}
ตัวอย่างโค้ดที่นำมาจาก:
https://www.intertech.com/Blog/secrets-of-the-spring-aop-proxy/