উত্তরগুলির মধ্যে অনেকগুলি ইতিমধ্যে জানিয়েছে যে এই টীকাগুলি কী জন্য ব্যবহৃত হয়, আমরা এখানে তাদের মধ্যে কিছু ছোটখাটো পার্থক্য ফোকাস করব।
প্রথম মিল
আবার হাইলাইট করার প্রথম বিষয়টি হ'ল স্ক্যান-অটো-সনাক্তকরণ এবং বিয়ান ডেফিনিশনটির জন্য নির্ভরতা ইনজেকশন সম্পর্কিত এই সমস্ত টিকা (যেমন।, @ কম্পোনেন্ট, @ সার্ভিস, @ রিপোজিটরি, @ কনট্রোলার) একই। আমরা অন্যটির জায়গায় একটি ব্যবহার করতে পারি এবং এখনও আমাদের কাছাকাছি যেতে পারি।
@ কম্পোনেন্ট, @ রিপোসিটোরি, @ কনট্রোলার এবং @ সার্ভিসের মধ্যে পার্থক্য
@উপাদান
এটি একটি সাধারণ-উদ্দেশ্যগত স্টেরিওটাইপ টীকা যা ইঙ্গিত করে যে ক্লাসটি একটি বসন্ত উপাদান।
বিশেষ কি @Component সম্পর্কে
<context:component-scan> শুধুমাত্র স্ক্যান@Componentএবং জন্য দেখাচ্ছে না@Controller,@Serviceএবং@Repositoryসাধারণভাবে। এগুলি স্ক্যান করা হয় কারণ তারা নিজেরাই টিকা থাকে@Component।
শুধু কটাক্ষপাত করা @Controller, @Serviceএবং @Repositoryটীকা সজ্ঞা:
@Component
public @interface Service {
….
}
@Component
public @interface Repository {
….
}
@Component
public @interface Controller {
…
}
সুতরাং, এটা যে বলা ভুল নয় @Controller, @Serviceএবং @Repositoryবিশেষ ধরনের হয় @Componentটীকা। <context:component-scan>তাদের তুলে এবং তাদের নীচের ক্লাসগুলি মটরশুটি হিসাবে নিবন্ধভুক্ত করে, যেমন তাদের সাথে টিকা দেওয়া হয়েছিল @Component।
বিশেষ ধরণের টীকাগুলিও স্ক্যান করা হয়, কারণ এগুলি নিজেরাই টিকা দিয়ে @Componentটানা থাকে, যার অর্থ তারাও @Components যদি আমরা আমাদের নিজস্ব কাস্টম টীকাগুলি সংজ্ঞায়িত করি এবং এটির সাথে এ্যানোটেট @Componentকরি তবে এটিও স্ক্যান হয়ে যাবে<context:component-scan>
@Repository
এটি নির্দেশ করে যে ক্লাস একটি ডেটা সংগ্রহস্থল সংজ্ঞায়িত করে।
@ রিপোসিটরি সম্পর্কে বিশেষ কি?
এটি উল্লেখ করার পাশাপাশি, যে এটি একটি টিকা ভিত্তিক কনফিগারেশন , @Repositoryএর কাজ হ'ল প্ল্যাটফর্মের নির্দিষ্ট ব্যতিক্রমগুলি ধরা এবং তাদেরকে স্প্রিংয়ের একীভূত চেক করা ব্যতিক্রম হিসাবে পুনরায় নিক্ষেপ করা। এর জন্য, আমাদের সরবরাহ করা হয়েছে PersistenceExceptionTranslationPostProcessor, যা আমাদের বসন্তের প্রয়োগ প্রসঙ্গে যুক্ত করতে হবে:
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
এই শিম পোস্ট প্রসেসরটি এমন কোনও শিমের সাথে একটি পরামর্শক যুক্ত করে @Repositoryযাতে কোনও প্ল্যাটফর্ম-নির্দিষ্ট ব্যতিক্রম ধরা পড়ে এবং তারপরে স্প্রিংয়ের চেক করা ডেটা অ্যাক্সেস ব্যতিক্রমগুলির একটি হিসাবে পুনরায় ছুঁড়ে ফেলা হয়।
@Controller
@Controllerটীকা ইঙ্গিত করে যে একটি বিশেষ শ্রেনীর একটি নিয়ামক ভূমিকা স্থল। @Controllerটীকা, সটীক ক্লাসের জন্য একটি বাঁধাধরা হিসাবে কাজ করে তার ভূমিকা নির্দেশ করে।
@ নিয়ন্ত্রণকারী সম্পর্কে বিশেষ কি?
আমরা এই টীকাটি অন্যর মতো @Serviceবা অন্যগুলির মতো দেখতে স্যুইচ করতে পারি না @Repositoryযদিও সেগুলি দেখতে একই রকম। প্রেরণকারী দ্বারা টীকাযুক্ত ক্লাসগুলি স্ক্যান করে @Controllerএবং @RequestMappingসেগুলির মধ্যে টীকাগুলির সাথে টীকাযুক্ত পদ্ধতিগুলি সনাক্ত করে। আমরা ব্যবহার করতে পারি @RequestMappingকেবলমাত্র সেই পদ্ধতি যার শ্রেণীর সঙ্গে সটীক হয় চালু / @Controllerএবং এটি হবে না সঙ্গে কাজ @Component, @Service, @Repositoryইত্যাদি ...
নোট: একটি বর্গ ইতিমধ্যে মাধ্যমে মতো কোনো বিকল্প পদ্ধতি মাধ্যমে একটি শিম হিসাবে নিবন্ধিত করা হয়, তাহলে @Beanবা এর মাধ্যমে @Component, @Serviceইত্যাদি ... টীকা, তারপর @RequestMappingযদি বর্গ সাথে সটীক হয় বাছাই করা যেতে পারে @RequestMappingটীকা। তবে এটি একটি ভিন্ন দৃশ্য।
@Service
@Service মটরশুটি ব্যবসায়িক যুক্তি এবং কল পদ্ধতিতে সংগ্রহস্থল স্তরে ধারণ করে।
@ সার্ভিস সম্পর্কে বিশেষ কি?
এটি ব্যবসায়ের যুক্তি ধারণ করে, এটি উল্লেখ করার জন্য এটি ব্যবহার করা হয়েছে তা বাদে এই টীকাতে অন্য কিছুই লক্ষণীয় নয়; তবে কে জানে, বসন্ত ভবিষ্যতে কিছু অতিরিক্ত ব্যতিক্রম যুক্ত করতে পারে।
আর কি?
উপরে অনুরূপ, ভবিষ্যতে স্প্রিং জন্য বিশেষ বৈশিষ্ট্য যোগ করতে পারেন @Service, @Controllerএবং @Repositoryতাদের layering নিয়মাবলী উপর ভিত্তি করে। সুতরাং, কনভেনশনকে সম্মান করা এবং স্তরগুলির সাথে মিল রেখে এটি ব্যবহার করা সর্বদা একটি ভাল ধারণা।