8-modul · 3-dars: AOP
Daraja: Ilg'or
AOP. Spring Framework bo‘yicha nazariya, amaliy namuna va mustaqil mashq.
Tushuntirish
## Dars maqsadi AOP tushunchalarini farqlash, nima uchun kerakligini izohlash va kichik misolda qo‘llash.
## Nazariya AOP bir nechta servisda takrorlanadigan logging, transaction yoki timing kabi cross-cutting concernni asosiy biznes koddan ajratadi. Aspect shu siyosatni jamlaydi. Spring AOP join point sifatida metod bajarilishini qo'llaydi; pointcut qaysi metodlar tanlanishini, advice esa nima bajarilishini bildiradi. OOP obyekt mas'uliyatini, AOP kesishuvchi xatti-harakatni tuzadi. Before, AfterReturning, AfterThrowing, After va Around advice turlari bor. Around ProceedingJoinPoint.proceed() orqali asl chaqiruvni davom ettiradi; uni unutish biznes metod bajarilmasligiga olib keladi. @Aspect va proxy konfiguratsiyasi yoki XML AOP konfiguratsiyasi ishlatiladi. Keragidan keng pointcut parol va katta bodylarni logga chiqarishi mumkin. Spring AOP odatda JDK interface proxy yoki class-based proxy bilan ishlaydi. Shu obyekt ichidagi this.method() proxy chegarasidan o'tmaydi; private/final metodlarga class proxy cheklovlari bor. AspectJ weaving boshqa mexanizm. Tranzaksiya va async annotationlaridagi ishlamay qoldi degan holatlarni proxy chegarasidan boshlab tahlil qiling.
## Manbalar [Moduldagi savollar yo‘nalishi](https://github.com/jlkesh/pdp_online_java_lessons/blob/main/interviewquestions/8-module%28Spring%20Introduction%29.md) [Rasmiy qo‘llanma](https://docs.spring.io/spring-framework/reference/)
Kod quyida o‘quv namunasi sifatida berilgan. To‘liq ilova uchun import, dependency va konfiguratsiya kerak bo‘lishi mumkin. SQLni faqat ajratilgan test bazasida bajaring.
Kod misoli
@org.aspectj.lang.annotation.Around("execution(* example.study..*(..))")
public Object measure(org.aspectj.lang.ProceedingJoinPoint call) throws Throwable {
long start = System.nanoTime();
try { return call.proceed(); }
finally { recordDuration(System.nanoTime() - start); }
}
// @Aspect bean ichida; recordDuration metrikani yozadigan yordamchi metod.
Keng tarqalgan xatolar
- Self-invocation orqali chaqirilgan metoddagi @Transactional yoki @Async ishlashiga tayanmang.
Mashqlar
- Bir metodni boshqa bean orqali va this orqali chaqirib advice ishlashini solishtiring.
- Metod bajarilish vaqtini o'lchaydigan @Around aspect yozing.
Teglar: pdp, nazariya, modul-08