লেওম্যান ব্যাখ্যা এমন কাউকে যারা ধারণাটি এওপি-তে নতুন for এটি সম্পূর্ণ নয়, তবে ধারণাগুলি উপলব্ধি করতে সহায়তা করা উচিত। আপনি যদি ইতিমধ্যে বেসিক জারগনের সাথে পরিচিত হন তবে আপনি এখন পড়া বন্ধ করতে পারেন।
ধরে নিন আপনার কাছে একটি সাধারণ শ্রেণির কর্মচারী রয়েছে এবং প্রতিবার এই পদ্ধতিগুলি বলা হওয়ার সময় আপনি কিছু করতে চান।
class Employee{
public String getName(int id){....}
private int getID(String name){...}
}
এই পদ্ধতিগুলিকে জোয়েন্টপয়েন্টস বলা হয় । আমাদের এই পদ্ধতিগুলি সনাক্ত করার একটি উপায় প্রয়োজন যাতে কাঠামোটি সমস্ত শ্রেণীর মধ্যে পদ্ধতিগুলি খুঁজে পেতে পারে me সুতরাং আমরা এই পদ্ধতির স্বাক্ষরের সাথে মেলে একটি নিয়মিত প্রকাশ করব। আপনি নীচে দেখতে পাবেন যেমন এটি আরও আছে, কিন্তু আলগাভাবে এই নিয়মিত অভিব্যক্তি যা পয়েন্টকুট সংজ্ঞায়িত করে । যেমন
* * mypackage.Employee.get*(*)
প্রথম * সংশোধক সরকারী / ব্যক্তিগত / সুরক্ষিত / ডিফল্ট জন্য। দ্বিতীয় * পদ্ধতির রিটার্ন টাইপের জন্য।
তবে তারপরে আপনাকে আরও দুটি জিনিস বলতে হবে:
- কখন কোন পদক্ষেপ নেওয়া উচিত - যেমন পদ্ধতি প্রয়োগের পূর্বে / পরে বা ব্যতিক্রম
- এটি মিলে গেলে কী করা উচিত (সম্ভবত কেবল কোনও বার্তা মুদ্রণ করা উচিত)
এই দুটিয়ের সংমিশ্রণকে পরামর্শ বলা হয় ।
আপনি কল্পনা করতে পারেন, আপনি # 2 করতে সক্ষম হতে একটি ফাংশন লিখতে হবে। সুতরাং এটি বেসিকদের জন্য এটি দেখতে কেমন হতে পারে।
দ্রষ্টব্য: স্পষ্টতার জন্য, এর পরিবর্তে REGEX শব্দটি ব্যবহার করুন * * mypackage.Employee.get*(*)
। বাস্তবে পুরো প্রকাশটি সংজ্ঞাতে চলে যায়।
@Before("execution(REGEX)")
public void doBeforeLogging() {....} <-- executed before the matching-method is called
@After("execution(REGEX)")
public void doAfterLogging() {....} <-- executed after the matching-method is called
আপনি একবারে এটিকে কিছুটা ব্যবহার শুরু করার পরে, আপনি পরামর্শগুলি প্রায় @ পরে / @ এর আগে / @ নির্দিষ্ট করে দিতে পারেন। পুনরাবৃত্তি রেগুলার এক্সপ্রেশনের অবশেষে জিনিষ বিভ্রান্তিকর এবং বজায় রাখা কঠিন আপ শেষ হয়ে যাবে। সুতরাং আমরা কী করি, আমরা কেবল প্রকাশের একটি নাম দিয়েছি এবং এপেক্ট ক্লাসে অন্য কোথাও এটি ব্যবহার করি।
@Pointcut("execution(REGEX)") <-- Note the introduction of Pointcut keyword
public void allGetterLogging(){} <-- This is usually empty
@Before("allGetterLogging")
public void doBeforeLogging() {....}
@After("allGetterLogging")
public void doAfterLogging() {....}
বিটিডাব্লু, আপনি এই সম্পূর্ণ যুক্তিটি কোনও ক্লাসে গুটিয়ে রাখতে চাইবেন, তাকে Aspect বলা হয় এবং আপনি একটি ক্লাস লিখবেন:
@Aspect
public class MyAwesomeAspect{....}
এই সমস্ত জিনিসকে কাজ করার জন্য, আপনাকে স্প্রিংকে @ এওপি কীওয়ার্ডগুলি পড়তে, বুঝতে এবং পদক্ষেপ নেওয়ার জন্য ক্লাসগুলি পার্স করার জন্য বলতে হবে। এটি করার একটি উপায় হ'ল বসন্তের কনফিগারেশন এক্সএমএল ফাইলে নিম্নলিখিতটি নির্দিষ্ট করা:
<aop:aspectj-autoproxy>