স্প্রিং এওপি: জয়েন্টপয়েন্ট এবং পয়েন্টকটের মধ্যে পার্থক্য কী?


88

আমি অ্যাস্পেক্ট ওরিয়েন্টেড প্রোগ্রামিং ধারণা এবং স্প্রিং এওপি শিখছি। আমি পয়েন্টকুট এবং একটি জোয়েন্টপয়েন্টের মধ্যে পার্থক্য বুঝতে ব্যর্থ হয়েছি - উভয়ই আমার কাছে একই বলে মনে হচ্ছে। পয়েন্টকুট হ'ল যেখানে আপনি আপনার পরামর্শ প্রয়োগ করেন এবং একটি জোয়েন্টপয়েন্টও এমন একটি জায়গা যেখানে আমরা আমাদের পরামর্শ প্রয়োগ করতে পারি। তাহলে পার্থক্য কী?

পয়েন্টকাটের উদাহরণ হতে পারে:

@Pointcut("execution(* * getName()")

জয়েন্টপয়েন্টের উদাহরণ কী হতে পারে?

উত্তর:


162

জোয়েন্টপয়েন্ট: একটি জোয়েন্টপয়েন্ট হ'ল অ্যাপ্লিকেশনটির প্রোগ্রাম এক্সিকিউশনের একটি প্রার্থী পয়েন্ট যেখানে কোনও দিকটি প্লাগ করা যেতে পারে point এই পয়েন্টগুলি যেখানে আপনার আচরণের কোডটি নতুন আচরণ যুক্ত করতে আপনার অ্যাপ্লিকেশনটির স্বাভাবিক প্রবাহে প্রবেশ করা যেতে পারে।

পরামর্শ: এটি এমন একটি অবজেক্ট যা কোনও বিন্দু দ্বারা নির্দিষ্ট একটি জোয়েন্ট পয়েন্টে সঞ্চালনের জন্য কর্মের প্রতিনিধিত্ব করে এমন সিস্টেমের বিস্তৃত উদ্বেগগুলিতে API ডাকে includes

পয়েন্টকুট : একটি পয়েন্টকুট সংযুক্ত করে কী সংযুক্ত বিন্দুতে, সম্পর্কিত পরামর্শ প্রয়োগ করা উচিত। পরামর্শটি এওপি কাঠামোর দ্বারা সমর্থিত যে কোনও জোয়েন্টপয়েন্টে প্রয়োগ করা যেতে পারে। অবশ্যই, আপনি সমস্ত সম্ভাব্য সংযোগস্থলে আপনার সমস্ত দিক প্রয়োগ করতে চান না। পয়েন্টকাটস আপনাকে আপনার পরামর্শটি কোথায় প্রয়োগ করতে চান তা নির্দিষ্ট করার অনুমতি দেয়। প্রায়শই আপনি এই পয়েন্টকাটগুলি নির্দিষ্ট ক্লাস এবং পদ্ধতির নাম ব্যবহার করে বা নিয়মিত এক্সপ্রেশনগুলির মাধ্যমে নির্দিষ্ট করে যা ম্যাচিং ক্লাস এবং পদ্ধতির নামের নিদর্শনগুলি সংজ্ঞায়িত করে। কিছু এওপি ফ্রেমওয়ার্ক আপনাকে ডায়নামিক পয়েন্টকাটগুলি তৈরি করতে দেয় যা রানটাইম সিদ্ধান্তের উপর ভিত্তি করে পরামর্শ প্রয়োগ করতে হবে কিনা তা নির্ধারণ করে, যেমন পদ্ধতির পরামিতির মান।

নিম্নলিখিত চিত্রটি আপনাকে পরামর্শ, পয়েন্টকুট, জয়েন্টপয়েন্টগুলি বুঝতে সহায়তা করতে পারে। এখানে চিত্র বর্ণনা লিখুন

উৎস

রেস্তোঁরা সাদৃশ্য ব্যবহার করে ব্যাখ্যা : @ উইক্টর দ্বারা উত্স

আপনি যখন কোনও রেস্তোরাঁয় বাইরে যান, আপনি একটি মেনু দেখুন এবং যে কোনও পছন্দ থেকে বেছে নিতে পারেন। আপনি মেনুতে যে কোনও একটি বা একাধিক আইটেম অর্ডার করতে পারেন। তবে আপনি যতক্ষণ না তাদের অর্ডার দিচ্ছেন ততক্ষণ এগুলি কেবল "খাওয়ার সুযোগ"। একবার আপনি অর্ডার দিলে এবং ওয়েটার আপনার টেবিলে এনে দেয়, এটি একটি খাবার।

জয়পয়েন্টগুলি হ'ল মেনুতে বিকল্প এবং পয়েন্টকুটগুলি আপনার নির্বাচিত আইটেম।

একটি জোয়েন্টপয়েন্ট হ'ল কোডটির মধ্যে আপনার একটি দিক প্রয়োগ করার জন্য একটি সুযোগ ... কেবল একটি সুযোগ। একবার আপনি সেই সুযোগটি গ্রহণ করলে এবং এক বা একাধিক জয়পয়েন্টগুলি নির্বাচন করুন এবং সেগুলিতে একটি দিক প্রয়োগ করুন, আপনি পয়েন্টকুট পেয়ে যাবেন।

উত্স উইকি :

একটি জোয়েন্টপয়েন্ট হ'ল একটি প্রোগ্রামের নিয়ন্ত্রণ প্রবাহের একটি বিন্দু যেখানে নিয়ন্ত্রণ প্রবাহ দুটি পৃথক পাথ (আইএমও: এজন্য কল জয়েন্ট) এর মাধ্যমে আসতে পারে।

পরামর্শে একটি শ্রেণির ফাংশন বর্ণনা করা হয় যা অন্যান্য ফাংশনগুলিকে পরিবর্তন করে

একজন Pointcut একটি মানানসই হয় পি Joinpoint অর্থাত পয়েন্ট যোগদানের সেট attern।


4
এটি সঠিক উত্তর হিসাবে চিহ্নিত করা উচিত। আরও কিছু তথ্য যুক্ত করতে, ক্রেগি প্রাচীরের উত্তরটি দেখুন ... কোডরঞ্চড / টি / ৪৪৫৫২৫ / স্প্রিং / ডিফারেন্স- জয়য়েন্ট-পয়েন্ট-পয়েন্ট-পয়েন্ট- কাট
ভিক্টর

4
বিন্দুতে: একটি পয়েন্টকুটটি কী সংযোগের পরামর্শ প্রয়োগ করতে হবে তা নির্ধারণ করে +1
নামান গালা

কেবল নিশ্চিতকরণের জন্য, more Joinpoints and apply an aspect to them, you've got a Pointcut. তাদের প্রতি দিক বা তাদের পরামর্শের জন্য?
আসিফ মোশতাক

@ প্রমরাজ তাই আপনার সাদৃশ্য অনুসারে খাবারটি অর্ডার করবেন। আমি কি সঠিক?
বিশ্বাস আত্রে

রেস্তোঁরা সাদৃশ্য জয়েন্টপয়েন্ট এবং পয়েন্টকুটগুলির মধ্যে বিভ্রান্তি দূর করতে সহায়তা করেছে, ধন্যবাদ!
এসএম

31

একটি জোড় পয়েন্ট এবং পয়েন্টকটের মধ্যে পার্থক্য বুঝতে, পয়েন্টকুটগুলি বুনন বিধিগুলি নির্দিষ্ট করে হিসাবে বিবেচনা করুন এবং সেই নিয়মগুলিকে সন্তুষ্ট করার মতো পরিস্থিতিতে পয়েন্টগুলিতে যোগদান করুন।

নীচে উদাহরণে,

  @Pointcut("execution(* * getName()")  

পয়েন্টকুট বিধিগুলি সংজ্ঞায়িত করে বলেছেন, যে কোনও প্যাকেজে যে কোনও শ্রেণিতে উপস্থিত getName () পদ্ধতিতে পরামর্শ প্রয়োগ করা উচিত এবং জয়েন্টপয়েন্টগুলি ক্লাসে উপস্থিত সমস্ত getName () পদ্ধতির একটি তালিকা হবে যাতে এই পদ্ধতিগুলির উপর পরামর্শ প্রয়োগ করা যায়।

(বসন্তের ক্ষেত্রে নিয়মটি শুধুমাত্র পরিচালিত মটরশুটিগুলিতে প্রয়োগ করা হবে এবং পরামর্শগুলি কেবল সর্বজনীন পদ্ধতিতে প্রয়োগ করা যেতে পারে)।


4
"পয়েন্টকুট বিধিগুলি সংজ্ঞায়িত করে বলেছেন, যে কোনও প্যাকেজে যে কোনও ক্লাসে উপস্থিত getName () পদ্ধতিতে পরামর্শ প্রয়োগ করা উচিত এবং জয়েন্টপয়েন্টগুলি ক্লাসে উপস্থিত সমস্ত getName () পদ্ধতির একটি তালিকা হবে যাতে এই পদ্ধতিগুলির উপর পরামর্শ প্রয়োগ করা যায়।" আমি দুঃখিত তবে এটি আরও বিভ্রান্ত হচ্ছে। আপনি কি দয়া করে আমাকে বাস্তব জীবনের প্রতিদিনের জীবনের দৃশ্যে একটি উপমা দিতে পারেন?
সৌরভ পাতিল

28

জয়েনপয়েন্টস: এটি মূলত আসল ব্যবসায়ের যুক্তিতে এমন জায়গা যেখানে আপনি কিছু বিবিধ কার্যকারিতা সন্নিবেশ করতে চান যা প্রয়োজনীয় তবে সত্যিকারের ব্যবসায়িক যুক্তির অংশ না হয়ে। জয়েন্টপিন্টের কয়েকটি উদাহরণ হ'ল: পদ্ধতি কল, পদ্ধতিটি সাধারণত ফিরে আসা, পদ্ধতিটি একটি ব্যতিক্রম ছুঁড়ে দেওয়া, কোনও বস্তুকে তাত্ক্ষণিকভাবে চিহ্নিত করা, কোনও বস্তুর উল্লেখ ইত্যাদি ring

পয়েন্টকুটস: পয়েন্টকুটগুলি নিয়মিত এক্সপ্রেশনগুলির মতো কিছু যা জয়েন্টপয়েন্টগুলি সনাক্ত করতে ব্যবহৃত হয়। পন্টকুটগুলি "পয়েন্টকুট এক্সপ্রেশন ভাষা" ব্যবহার করে প্রকাশ করা হয়। পয়েন্টকাটগুলি বাস্তবায়ন প্রবাহের পয়েন্ট যেখানে ক্রস কাটিয়া উদ্বেগ প্রয়োগ করা প্রয়োজন। জয়েন্টপয়েন্ট এবং পয়েন্টকুট মধ্যে পার্থক্য আছে; জয়েন্টপয়েন্টগুলি আরও সাধারণ এবং যে কোনও নিয়ন্ত্রণ প্রবাহকে প্রতিনিধিত্ব করে যেখানে আমরা ক্রস কাটিয়া উদ্বেগকে 'বেছে নিতে' পারি যখন পয়েন্টকটস এমন জয়েন্টপয়েন্টগুলিকে চিহ্নিত করে যেখানে 'আমরা চাই' একটি ক্রস কাটিয়া উদ্বেগ প্রবর্তন করে।


4
জয়য়েন্টপয়েন্ট - পরামর্শ কোড প্রয়োগ / চালানোর জন্য সম্ভাব্য স্থান। পয়েন্টকুট - পরামর্শ কার্যকর করার জন্য প্রকৃত নির্বাচিত সংযুক্তি।
ব্যবহারকারী 104309

26

লেওম্যান ব্যাখ্যা এমন কাউকে যারা ধারণাটি এওপি-তে নতুন for এটি সম্পূর্ণ নয়, তবে ধারণাগুলি উপলব্ধি করতে সহায়তা করা উচিত। আপনি যদি ইতিমধ্যে বেসিক জারগনের সাথে পরিচিত হন তবে আপনি এখন পড়া বন্ধ করতে পারেন।

ধরে নিন আপনার কাছে একটি সাধারণ শ্রেণির কর্মচারী রয়েছে এবং প্রতিবার এই পদ্ধতিগুলি বলা হওয়ার সময় আপনি কিছু করতে চান।

class Employee{
    public String getName(int id){....}
    private int getID(String name){...}
}

এই পদ্ধতিগুলিকে জোয়েন্টপয়েন্টস বলা হয় । আমাদের এই পদ্ধতিগুলি সনাক্ত করার একটি উপায় প্রয়োজন যাতে কাঠামোটি সমস্ত শ্রেণীর মধ্যে পদ্ধতিগুলি খুঁজে পেতে পারে me সুতরাং আমরা এই পদ্ধতির স্বাক্ষরের সাথে মেলে একটি নিয়মিত প্রকাশ করব। আপনি নীচে দেখতে পাবেন যেমন এটি আরও আছে, কিন্তু আলগাভাবে এই নিয়মিত অভিব্যক্তি যা পয়েন্টকুট সংজ্ঞায়িত করে । যেমন

* * mypackage.Employee.get*(*)

প্রথম * সংশোধক সরকারী / ব্যক্তিগত / সুরক্ষিত / ডিফল্ট জন্য। দ্বিতীয় * পদ্ধতির রিটার্ন টাইপের জন্য।

তবে তারপরে আপনাকে আরও দুটি জিনিস বলতে হবে:

  1. কখন কোন পদক্ষেপ নেওয়া উচিত - যেমন পদ্ধতি প্রয়োগের পূর্বে / পরে বা ব্যতিক্রম
  2. এটি মিলে গেলে কী করা উচিত (সম্ভবত কেবল কোনও বার্তা মুদ্রণ করা উচিত)

এই দুটিয়ের সংমিশ্রণকে পরামর্শ বলা হয় ।

আপনি কল্পনা করতে পারেন, আপনি # 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>


4
আমি এওপি-তে নতুন এবং এই ব্যাখ্যাটি আমাকে পরামর্শ / পয়েন্টকুটস / জয়েন্টপয়েন্টগুলির মধ্যে সম্পর্কটি পরিষ্কারভাবে বুঝতে সাহায্য করেছে।
যতীন শাশু

এটি, স্যার, একটি নবাগত সন্তানের জন্য আরও ভাল ব্যাখ্যা। ধন্যবাদ
আকাশ

11

এসকিউএল-এর মতো ডেটা কোয়েরি ভাষার সাথে এসপেক্টজে-এর মতো একটি এওপি ভাষার তুলনা করা, আপনি অনেকগুলি সারি সহ একটি ডাটাবেস সারণী হিসাবে জোড়পয়েন্টগুলি (যেমন আপনার কোডের সমস্ত জায়গাগুলি যেখানে আপনার দিকের কোডটি বুনতে পারেন) হিসাবে ভাবতে পারেন। পয়েন্টকুটটি একটি নির্বাচনী স্ট্যামমেন্টের মতো যা সারি / জোড় পয়েন্টগুলির ব্যবহারকারীর দ্বারা সংজ্ঞায়িত উপসেট বেছে নিতে পারে। সেই নির্বাচিত জায়গাগুলিতে আপনি যে সত্যিকারের কোডটি বুনেন সেটিকে পরামর্শ বলে।


9

সংজ্ঞা

ডকুমেন্টেশন অনুযায়ী:

যোগদানের বিন্দু: কোনও প্রোগ্রামের সম্পাদনের সময় একটি পয়েন্ট, যেমন কোনও পদ্ধতি কার্যকর করা বা কোনও ব্যতিক্রম পরিচালনা করা।

আপনি যৌথ পয়েন্টগুলিকে কোনও প্রোগ্রাম কার্যকর করার ইভেন্ট হিসাবে বিবেচনা করতে পারেন । আপনি যদি স্প্রিং এওপি ব্যবহার করে থাকেন তবে এটি এমনকি পদ্ধতিগুলির জন্য সীমাবদ্ধ। AspectJ আরও নমনীয়তা সরবরাহ করে।

আপনি কোনও রেস্তোরাঁয় যাওয়ার সময় মেনুতে সমস্ত খাবার না খাওয়ার কারণে আপনি কখনই সমস্ত ইভেন্টগুলি পরিচালনা করেন না (আমি আপনাকে চিনি না, আপনি সম্ভবত! তবে, আমি অবশ্যই তা করি না)। সুতরাং আপনি পরিচালনা করতে ইভেন্টগুলির একটি নির্বাচন করুন এবং তাদের সাথে কী করবেন। পয়েন্টকাটস এখানে যায় । ডকুমেন্টেশন অনুযায়ী,

পয়েন্টকুট : একটি শিকারী যা পয়েন্টগুলিতে মেলে ।

তারপরে আপনি পয়েন্টকটের সাথে কী করবেন তা যুক্ত করেন , সেখানে পরামর্শ রয়েছে । ডকুমেন্টেশন অনুযায়ী,

এডভাইস একটি সঙ্গে যুক্ত করা হয় pointcut pointcut দ্বারা মেলানো কোন যোগদানের সময়ে মত প্রকাশ ও রান।

কোড

package com.amanu.example;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

/**
 * @author Amanuel Nega on 10/25/16.
 */
class ExampleBussinessClass {

    public Object doYourBusiness() {
        return new Object();
    }

}

@Aspect
class SomeAspect {

    @Pointcut("execution(* com.amanu.example.ExampleBussinessClass.doYourBusiness())")
    public void somePointCut() {
    }//Empty body suffices

    @After("somePointCut()")
    public void afterSomePointCut() {
        //Do what you want to do after the joint point is executed
    }

    @Before("execution(* *(*))")
    public void beforeSomePointCut() {
        //Do what you want to do before the joint point is executed
    }

}

কোডের ব্যাখ্যা

  • ExampleBusinessClass প্রক্সি-এড যখন, আমাদের লক্ষ্য!
  • doYourBusiness()একটি সম্ভাব্য যৌথ পয়েন্ট
  • SomeAspect আমাদের দিকটি এমন যে গাধা একাধিক উদ্বেগকে অতিক্রম করে ExampleBusinessClass
  • somePointCut()আমাদের যৌথ পয়েন্টের সাথে মেলে এমন একটি পয়েন্ট কাটার সংজ্ঞা
  • afterSomePointCut()একটি পরামর্শ যা আমাদের somePointCut পয়েন্ট কাটার পরে কার্যকর করা হবে যা যৌথ পয়েন্টের সাথে মেলেdoYourBusiness()
  • beforeSomePointCut()এটি এমন একটি পরামর্শ যা সমস্ত publicপদ্ধতি কার্যকর করার সাথে মেলে । বিপরীতে afterSomePointCut, এইটি একটি ইনলাইন পয়েন্ট কাটা ঘোষণা ব্যবহার করে

আপনি আমাকে বিশ্বাস না করলে আপনি ডকুমেন্টেশনটি দেখতে পারেন। আশা করি এটা কাজে লাগবে


4
সহজ ব্যাখ্যা। কেবল উদ্ধৃত তিনটি পাঠ্যই বুঝতে যথেষ্ট। ধন্যবাদ

6

উভয়ই দিক-ভিত্তিক প্রোগ্রামিংয়ের "যেখানে" সম্পর্কিত।

একটি জোড় পয়েন্ট হ'ল একটি পৃথক জায়গা যেখানে আপনি AOP এর সাথে কোড চালাবেন। যেমন "যখন কোনও পদ্ধতি ব্যতিক্রম ছোঁড়ে"।

একটি পয়েন্টকুট হ'ল যোগদানের পয়েন্টগুলির সংগ্রহ। উদাহরণস্বরূপ "ক্লাস ফুতে যখন কোনও পদ্ধতি ব্যতিক্রম ছুঁড়ে ফেলে"।


5

জয়য়েন্টপয়েন্ট : জয়য়েন্টপয়েন্ট আপনার প্রোগ্রামের প্রয়োগের পয়েন্টগুলি যেখানে এক্সেকশন ধরার প্রবাহ বদলেছে, অন্য পদ্ধতি কল করে ception

পয়েন্টকুট : পয়েন্টকুট মূলত সেই জয়েন্টপয়েন্টগুলি যেখানে আপনি আপনার পরামর্শ (বা দিকটি কল করতে পারেন) রাখতে পারেন।

সুতরাং মূলত পয়েন্টকুটগুলিই জোয়েন্টপয়েন্টের সাবসেট


3

বসন্তে এওপি-র {উপদেষ্টা, পরামর্শ, পয়েন্টকুট, জয়েন্টপয়েন্ট}

আপনারা জানেন যে আওপের মূল উদ্দেশ্যটি অ্যাপ্লিকেশন কোড থেকে ক্রস-কাটিং উদ্বেগ যুক্তি (দিক )টিকে ডিকপল করছে, এটি আমরা বসন্তে ব্যবহার করি (পরামর্শ / পরামর্শদাতা)

পয়েন্টকুট ফিল্টার করতে ব্যবহৃত হয় যেখানে আমরা এই পরামর্শটি হুবহু প্রয়োগ করতে চাই, যেমন "সমস্ত পদ্ধতি সন্নিবেশের সাথে শুরু করা হয়" সুতরাং অন্যান্য পদ্ধতিগুলি বাদ দেওয়া হবে তাই পয়েন্টকুট ইন্টারফেসে রয়েছে have ClassFilter এবং মেথডম্যাচার}

সুতরাং পরামর্শ হ'ল ক্রস-কাটিং লজিক বাস্তবায়ন এবং পরামর্শদাতা পরামর্শ প্লাস পয়েন্টকুট, যদি আপনি কেবল পরামর্শ ব্যবহার করেন তবে বসন্ত এটিকে উপদেষ্টার কাছে মানচিত্র তৈরি করবে এবং পয়েন্টকুটকে সত্য করে দেবে যার অর্থ কোনও কিছুই আটকাবে না। এজন্য আপনি যখন কেবলমাত্র পরামর্শ ব্যবহার করেন এটি লক্ষ্য শ্রেণীর সমস্ত পদ্ধতিতে প্রয়োগ করা হয় কারণ আপনি সেগুলি ফিল্টার করেন নি।

তবে জয়েন্টপয়েন্টটি প্রোগ্রামের একটি অবস্থান, আপনি ক্লাস অবজেক্টে অ্যাক্সেস করার পরে আপনি এটি প্রতিবিম্বের মতো ভাবতে পারেন এবং তারপরে আপনি মেথড অবজেক্টটি পেতে পারেন, তবে আপনি এই শ্রেণীর যে কোনও পদ্ধতিতে প্রার্থনা করতে পারেন, এবং এইভাবে সংকলক কাজ করে, যদি আপনি মনে করেন এটি আপনি জয়েন্টপয়েন্টটি কল্পনা করতে পারেন।

জয়েন্টপয়েন্টটি ক্ষেত্র, নির্মাতা বা পদ্ধতির সাথে থাকতে পারে তবে বসন্তে আমাদের কেবল পদ্ধতিগুলির সাথে জয়েন্টপয়েন্ট রয়েছে, এ কারণেই বসন্তে আমাদের আগে (আগে, পরে, ছোঁড়া, কাছাকাছি) প্রকারের জয়েন্টপয়েন্ট রয়েছে, এগুলি সমস্তই শ্রেণীর অবস্থানগুলিকে বোঝায়।

আমি যেমন উল্লেখ করেছি যে বিনা পয়েন্টকাট (কোনও ফিল্টার) ছাড়াই আপনার পরামর্শ থাকতে পারে তবে এটি সমস্ত পদ্ধতিতে প্রয়োগ করা হবে বা আপনার পরামর্শদাতা থাকতে পারেন যা [পরামর্শ + পয়েন্টকুট] যা নির্দিষ্ট পদ্ধতিতে প্রয়োগ করা হবে তবে আপনি পরামর্শ ছাড়া পরামর্শ নিতে পারবেন না পয়েন্টকটের মতো জোয়েন্টপয়েন্ট, আপনাকে এটি নির্দিষ্ট করতে হবে এবং এজন্যই বসন্তে পরামর্শের ধরণগুলি হ'ল জয়েন্টপয়েন্টের মতো একই ধরণের তাই যখন আপনি কোনও পরামর্শ বেছে নেন আপনি কোন জয়েন্টপয়েন্টটি স্পষ্টভাবে চয়ন করেন।

মোড়ানোর জন্য, পরামর্শটি লক্ষ্য শ্রেণীর প্রতি আপনার দিকের বাস্তবায়ন যুক্তি, এই পরামর্শের অনুরোধের আগে একটি অনুরোধ হওয়া উচিত, প্রার্থনার পরে, নিক্ষেপের পরে বা প্রার্থনার আশেপাশে, তারপরে আপনি যেখানে ফিল্টার করতে পারেন ঠিক সেখানে পয়েন্টকুট ব্যবহার করে আপনি এটি প্রয়োগ করতে চান পদ্ধতিগুলি বা কোনও পয়েন্টকুট (ফিল্টার নেই) ফিল্টার করুন যাতে এটি শ্রেণীর সমস্ত পদ্ধতিতে প্রয়োগ করা হয়।


3

শ্রেণি বাস্তবায়নের ক্ষেত্রে একটি পয়েন্টকাট সংজ্ঞায়িত করা হয়। পয়েন্ট কাটা মূলত পরামর্শের মধ্যে পয়েন্টকাট এক্সপ্রেশনকে বোঝায়।

যেমন,

@Before("execution(* app.purchase2.service.impl.*(..))")
public void includeAddOns(RolesAllowed roles) {
..
}

উপরের অর্থগুলি, "অন্তর্ভুক্ত অ্যাডঅনস" পদ্ধতিটি আহ্বান করার আগে (@ পূর্ববর্তী পরামর্শের কারণে) যে কোনও পদ্ধতি (প্যাকেজের "ক্লাসে" app.purchase2.service.impl ") ডাকা হয়

পুরো টিকাটি পয়েন্টকাট বলে @Before("execution(* app.purchase2.service.impl.*(..))")

যৌথ বিন্দু হ'ল প্রকৃত পদ্ধতি প্রার্থনা, যা "app.purchase2.service.impl" প্যাকেজ "পার্সোনাল ক্লাসের পদ্ধতিতে" অ্যাডডনস () "তে যোগদান করে।

আপনি org.aspectj.lang.JoinPointক্লাসের সাথে জয়েন পয়েন্টের বৈশিষ্ট্যগুলি অ্যাক্সেস করতে পারেন ।


ভাল উত্তর! শেষ অবধি বুঝলাম পার্থক্য!
দান্তে

2

আমি মিলিগ্রোভের সাথে একমত .. একটি পয়েন্ট কাট একাধিক যৌথ পয়েন্টের সংগ্রহ হিসাবে বিবেচনা করা যেতে পারে। যৌথ বিন্দু নির্দিষ্ট অবস্থান নির্দিষ্ট করে যেখানে পরামর্শটি প্রয়োগ করা যেতে পারে, যেখানে পয়েন্টকুট হিসাবে সমস্ত যৌথ পয়েন্টের তালিকা প্রতিবিম্বিত হয়।


0

জয়পয়েন্ট: এটি প্রয়োগে একটি পয়েন্ট (পদ্ধতি) নির্দিষ্ট করে যেখানে পরামর্শ কার্যকর করা হবে।

পয়েন্টকুট: এটি জয়পয়েন্টস এর সংমিশ্রণ, এবং এটি নির্দিষ্ট করে যে কোনটিতে জোয়েন্টপয়েন্ট পরামর্শ কার্যকর করা হবে।


-5

জয়েন পয়েন্ট হ'ল এমন একটি জায়গা যেখানে আমরা আসলে পরামর্শগুলি রাখি

তবে পয়েন্ট কাটা হচ্ছে জয়েন পয়েন্টের সংগ্রহ। এর অর্থ আমরা ক্রস কাটিয়া যুক্তিটিকে কতটা উপায়ে রাখি তাকে পয়েন্ট কাট বলে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.