প্রথমত, কোনও কোড জেনারেশন চলছে না, যার অর্থ: কোনও সিজিবিব নয়, কোনও বাইট-কোড জেনারেশন নয়। মৌলিক পদ্ধতির হ'ল একটি জেডিকে প্রক্সি উদাহরণটি ProxyFactoryইন্টারফেসটি ব্যাক করতে স্প্রিংয়ের এপিআই ব্যবহার করে প্রোগ্রামগতভাবে তৈরি করা হয়েছিল এবং MethodInterceptorসমস্ত কলগুলিকে দৃষ্টান্তে ডেকে আনে এবং পদ্ধতিটিকে উপযুক্ত জায়গায় স্থান দেয়:
- যদি ভাণ্ডারটি কাস্টম বাস্তবায়নের অংশ দিয়ে শুরু করা হয়েছে ( বিশদের জন্য রেফারেন্স ডকুমেন্টেশনের সেই অংশটি দেখুন), এবং সেই পদ্ধতিটি যে শ্রেণিতে প্রয়োগ করা হয়েছিল, কলটি সেখানে স্থানান্তরিত হবে।
- যদি পদ্ধতিটি একটি কোয়েরি পদ্ধতি হয় (
DefaultRepositoryInformationএটি কীভাবে নির্ধারণ করা হয় তা দেখুন), স্টোর নির্দিষ্ট ক্যোয়ারী এক্সিকিউশন মেকানিজম শুরুতে সেই পদ্ধতির জন্য নির্ধারিত কোয়েরিটিকে কিক করে এবং কার্যকর করে। তার জন্য একটি রেজোলিউশন প্রক্রিয়া এমন স্থানে রয়েছে যা বিভিন্ন স্থানে স্পষ্টভাবে ঘোষিত কোয়েরিগুলি সনাক্ত করার চেষ্টা করে ( @Queryপদ্ধতিটি ব্যবহার করে, জেপিএ নামের কোয়েরিগুলি) অবশেষে পদ্ধতির নাম থেকে কোয়েরি অনুসন্ধানে ফিরে আসে। কোয়েরি প্রক্রিয়া সনাক্তকরণের জন্য, দেখুন JpaQueryLookupStrategy। ক্যোয়ারী ডেরাইভেশনটির বিশ্লেষণ যুক্তি খুঁজে পাওয়া যাবে PartTree। প্রকৃত ক্যোয়ারীতে স্টোর নির্দিষ্ট অনুবাদ যেমন দেখা যায় JpaQueryCreator।
- উপরের কোনওটি প্রয়োগ না করা হলে কার্যকরভাবে স্টোর-নির্দিষ্ট সংগ্রহস্থল বেস শ্রেণি দ্বারা (
SimpleJpaRepositoryজেপিএ ক্ষেত্রে) প্রয়োগ করা উচিত এবং কলটি এর উদাহরণে রূপান্তরিত হয়।
রাউটিং লজিকটি প্রয়োগকারী পদ্ধতি ইন্টারসেপ্টারটি QueryExecutorMethodInterceptor, উচ্চ স্তরের রাউটিং যুক্তিটি এখানে পাওয়া যাবে ।
এই প্রক্সিগুলির তৈরিকরণটি একটি স্ট্যান্ডার্ড জাভা ভিত্তিক কারখানার প্যাটার্ন বাস্তবায়নে আবদ্ধ। উচ্চ-স্তরের প্রক্সি তৈরির সন্ধান পাওয়া যাবে RepositoryFactorySupport। স্টোর-নির্দিষ্ট প্রয়োগগুলি তারপরে প্রয়োজনীয় অবকাঠামোগত উপাদানগুলি যুক্ত করুন যাতে জেপিএর জন্য আপনি এগিয়ে যেতে পারেন এবং কেবল এই জাতীয় কোড লিখতে পারেন:
EntityManager em = … // obtain an EntityManager
JpaRepositoryFactory factory = new JpaRepositoryFactory(em);
UserRepository repository = factory.getRepository(UserRepository.class);
আমি যে কারণে স্পষ্টভাবে উল্লেখ করেছি তা হ'ল এটি স্পষ্ট হয়ে উঠতে হবে যে এর মূল অংশে code কোডটির কোনও কিছুর জন্য প্রথমে স্প্রিং পাত্রে চালিত হওয়া দরকার না। এটি ক্লাসপথের একটি গ্রন্থাগার হিসাবে স্প্রিংয়ের প্রয়োজন (কারণ আমরা চাকাটি পুনরায় উদ্ভাবন করতে পছন্দ করি না), তবে সাধারণভাবে এটি ধারক অজ্ঞাবহ।
ডিআই কনটেইনারগুলির সাথে সংহতকরণটি সহজ করার জন্য আমরা অবশ্যই স্প্রিং জাভা কনফিগারেশন, একটি এক্সএমএল নেমস্পেস, তবে সিডিআই এক্সটেনশনের সাথে ইন্টিগ্রেশন তৈরি করেছি , যাতে স্প্রিং ডেটা সরল সিডিআই দৃশ্যে ব্যবহার করা যায়।
@Repositoryপ্রথম স্থানে টীকাগুলি ইন্টারফেসগুলি আবিষ্কার করেন তা বিশদ দিয়ে বলতে পারেন ? শোটির দিকেRepositoryFactorySupport#getRepository()তাকানো যে এটি প্যারামিটার হিসাবে ইন্টারফেস শ্রেণি নেয়, তাই এটি অন্য কোথাও আবিষ্কার করা উচিত। আমি বিশেষত কীভাবে কোনও টীকাকৃত ইন্টারফেসটি খুঁজে পেতে এবং স্বয়ংক্রিয়ভাবে একটি জেডিকে প্রক্সি বিন তৈরি করতে পারি যা ইন্টারফেসটি কার্যকর করে, খুব স্প্রিং-ডেটার মতো, তবে কোনও অ্যাপ্লিকেশন-নির্দিষ্ট উদ্দেশ্যে রিপোজিটরি সম্পর্কিত নয় not