آموزش Aop در چهارچوب کاری Spring
یکی از Component های اصلی و کلیدی چهارچوب کاری Spring ، کامپوننت AOP یا Programming Aspect oriented است .
Aspect oriented Programming باعث تفکیک شدن منطق و کدهای برنامه ( Logic ) به بخش های مجزایی به نام So-Called Concern می شود .
توابعی که بخش های مختلف یک برنامه را به هم وصل می کنند را Cross-Cutting Concerns می گویند . Cross-Cutting Concerns به صورت مفهومی ، از business Logic برنامه جدا هستند . مثال های مختلفی را برای این نوع برنامه های توان ذکر کرد مثل عملیات Logging ،
امنیت یا security و ... .
واحد اصلی هم پیمانه کردن کدها در OOP کلاس است ، اما در AOP از مفهوم aspect یه جای کلاس استفاده می شود . Dependency Injection به شما کمک می کند تا اشیای برنامه خود را از هم جدا کنید . از طرف دیگر AOP این امکان را در اختیارتان قرار داده تا Cross-cutting
Concern های برنامه را از Object هایی که آنها را تحت تاثیر قرار می دهند ، تفکیک کنید . AOP همانند trigger ها در زبان های برنامه نویسی مثل Perl یا .Net هستند .
Spring AOP ، رهگیری های کدی در اختیار شما قرار می دهد که به وسیله آنها ، می توانید فرآیند اجرای application را قطع کنید برای مثال ، وقتی که یک متد اجرا می شود شما می توانید کاربردها و کلیدهایی را برای مراحل قبل و بعد از اجرای متد ، به آن اضافه کنید .
تکنولوژی های AOP
قبل از شروع کار با AOP ، اجزه بدهید تا با مفهوم ها و اجرای اصلی AOP آشنا شویم . مواردی که در جدول زیر معرفی شده اند ، مختص Spring نبوده و بیشتربه AOP مربوط می شوند :
- Aspect : Aspect ماژولی است که دارای تعدادی API بوده و زمینه های لازم جهت Cross-Cutting را فراهم می کند . برای مثال ، یک ماژول Logging ، به عنوان AOP Aspect for نامیده خواهد شد .
- Join Point : Join Point نقطه ای در برنامه شماست که از طریق آن می توانید AOP Aspect را به برنامه متصل کنید . همچنین شما می توانید بگویید ، Join Point مکان واقعی است که یک action را از چهارچوب کاری Spring AOP دریافت می کند .
- Advise : این مفهوم ، action ای است که برنامه قبل یا از اجرای متد انجام می دهد . در واقع قطعه کدی است که توسط چهارچوب کاری Spring AOP در خلال اجرای برنامه ، فراخوانی می شود .
- Pointcut : Pointcut مجموعه ای از یک یا چندین Join Point است که advise بایستی در آن اجرا شود . شما می توانید Pointcut ها را به وسیله عبارت های دستوری ( expressions ) و یا الگوها ( pathern ) ، همانطور که در مثال های عملی درس خواهید داد ، تعیین نمایید .
- Introduction : یک Introduction به ما امکان می دهد تا متدها و خواص جدیدی را به کلاس های موجود اضافه کنیم .
- Target Object : شی است که توسط یک یا چند aspect مورد توجه قرار گرفته و همیشه یک Proxied خواهد بود . همچنین به آن advised object هم می گویند .
- Wearing : Wearing پروسه اتصال aspect ها به سایر اجزا و اشیای برنامه برای ایجاد advise object می باشد . این پروسه می تواند در زمان کامپایل ، لود و یا اجرا انجام شود .
مدل های مختلف Advice
Spring aspects می توانند با 5 نوع Advice ای که در جدول زیر معرفی شده اند ، کار کنند :
- before : این advice قبل از اجرای متد مورد نظر اجرا می شود .
- after : این advice بعد از اجرای متد مورد نظر و بدون توجه به خروجی آن اجرا می شود .
- after-returning :این advice پس از اجرای متد ، به شرطی که کاملا به درستی اجرا شده باشد رخ می دهد .
- after-throwing : این advice نیز پس از اجرای متد ، به شرطی که متد درست اجرا شده و یا اشکالی در آن رخ داده باشد انجام می شود .
- around : این advice نیز قبل و بعد از فراخوانی متد مورد نظر ، اجرا می شود .
شیوه های مختلف اجرای Aspect ها
Spring از دو رویکرد @AspectJ annotation style و schema-based برای اجرای aspect ها استفاده می کند . این دو رویکرد را در جدول زیر معرفی کرده ایم ، برای دریافت اطلاعات بیشتر برروی نام هریک کلیک نمایید :
XML Schema based : در این مدل Aspect ها با استفاده از کلاس های معمولی برنامه و مبتنی بر فایل پیکربندی اطلاعات XML اجرا می شوند .
AspectedJ based : در این مدل ، Aspect ها با استفاده از یک شیوه به نام @AspectJ و با کلاس های معمولی جاوا که تحت 5 Java عمل annotation برروی آنها انجام شده است ، اجرا می شوند .