@ কম্পোনেন্ট, @ রিপোসিটোরি এবং @ সার্ভিস টিকাগুলিতে বসন্তের মধ্যে পার্থক্য কী?


2103

ক্যান @Component, @Repositoryএবং @Serviceটীকা বসন্তে অদলবদল করে ব্যবহার করা বা তারা একটি স্বরলিপি ডিভাইস হিসাবে অভিনয় ছাড়াও কোন বিশেষ কার্যকারিতা প্রদান করেন?

অন্য কথায়, যদি আমি একটি পরিষেবা বর্গ আছে এবং আমি থেকে টীকা পরিবর্তন @Serviceকরতে @Component, এটা এখনও একই ভাবে আচরণ করবে?

বা টীকাও ক্লাসের আচরণ এবং কার্যকারিতা প্রভাবিত করে?


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

3
কিছু যায় আসে না !! আপনার জন্য যাই হোক না কেন :) আমি স্প্রিং সম্পর্কে সর্বদা এটি ঘৃণা করি যে তারা সর্বদা আপনার জন্য "নিয়ম" সংজ্ঞায়িত করে, যা কেবলমাত্র আপনার আবেদনের ক্ষেত্রে তুচ্ছ মূল্য যুক্ত করে। উল্লেখ করার দরকার নেই স্প্রিং এর নিজস্ব বিশাল স্ট্যাক নিয়ে আসে।
ট্রিকোর

30
@ ট্রাইকোর স্প্রটিং একটি কাঠামো, আপনার জন্য কাজ "নিয়ম" সংজ্ঞায়িত করুন :)
ওয়ালফ্র্যাট

উত্তর:


1498

স্প্রিং ডকুমেন্টেশন থেকে :

@Repositoryটীকা কোনো শ্রেণী ভূমিকা বা সংগ্রহস্থলের (এছাড়াও ডেটা অ্যাক্সেস অবজেক্ট বা দাও নামেও পরিচিত) বাঁধাধরা পরিপূর্ণ জন্য একটি চিহ্নিতকারী হয়। এই চিহ্নিতকরণের ব্যবহারগুলির মধ্যে ব্যতিক্রমগুলির স্বয়ংক্রিয় অনুবাদটিও ব্যতিক্রমী অনুবাদে বর্ণিত রয়েছে ।

স্প্রিং আরও বাঁধাধরা টীকা প্রদান করে: @Component, @Service, এবং @Controller@Componentযে কোনও বসন্ত-পরিচালিত উপাদানগুলির জন্য জেনেরিক স্টেরিওটাইপ। @Repository, @Service, এবং @Controllerএর বিশেষায়িত হয় @Componentআরো নির্দিষ্ট ব্যবহারের ক্ষেত্রে জন্য (মধ্যে অধ্যবসায়, সেবা, এবং উপস্থাপনা স্তর যথাক্রমে)। অতএব, আপনার সাথে আপনার উপাদান শ্রেণীর টিকা দিতে পারেন @Componentতাদের সাথে টিকা দ্বারা, কিন্তু @Repository, @Serviceঅথবা @Controller পরিবর্তে, আপনার ক্লাস আরো সঠিকভাবে সরঞ্জাম দ্বারা প্রক্রিয়াকরণের বা দিক সঙ্গে মেলামেশা জন্য উপযোগী হয়।

উদাহরণস্বরূপ, এই স্টেরিওটাইপ টীকাগুলি পয়েন্টকাটগুলির জন্য আদর্শ টার্গেট তৈরি করে। @Repository, @Serviceএবং @Controllerস্প্রিং ফ্রেমওয়ার্কের ভবিষ্যতে প্রকাশে অতিরিক্ত শব্দার্থক বহন করতে পারে। সুতরাং, আপনি যদি নিজের পরিষেবা স্তরটি ব্যবহার করে @Componentবা তার মধ্যে বেছে @Serviceনিচ্ছেন @Serviceতবে স্পষ্টভাবে এটি আরও ভাল পছন্দ। একইভাবে, যেমন আগেই বলা হয়েছে, @Repositoryইতিমধ্যে আপনার অধ্যবসায় স্তরের স্বয়ংক্রিয় ব্যতিক্রম অনুবাদের জন্য চিহ্নিতকারী হিসাবে সমর্থিত।

┌──────────────┬─────────────────────────────────────────────────────┐
 Annotation    Meaning                                             
├──────────────┼─────────────────────────────────────────────────────┤
  @Component   generic stereotype for any Spring-managed component 
  @Repository  stereotype for persistence layer                    
  @Service     stereotype for service layer                        
  @Controller  stereotype for presentation layer (spring-mvc)      
└──────────────┴─────────────────────────────────────────────────────┘

6
@ কন্ট্রোলার (বা @ কম্পোনেন্ট) কে একটি @ ওয়েবসার্ভলেটে যুক্ত করা কি বোধগম্য হবে? এটি একটি স্প্রিং এমভিসি নিয়ামক নয়, তবে এটি ধারণাগতভাবে নিকটতম ম্যাচ। সার্লেট ফিল্টারগুলি সম্পর্কে কী?
রিক

1
"@ রিপোসিটোরিটি ইতিমধ্যে আপনার অধ্যবসায় স্তরের স্বয়ংক্রিয় ব্যতিক্রম অনুবাদ হিসাবে চিহ্নিতকারী হিসাবে সমর্থিত does" এর অর্থ কি?
জ্যাক

9
এটি এই উল্লেখ করে যে এই টীকাগুলি এওপি-র পক্ষে ভাল টার্গেট এবং অন্য টিকাগুলি এখনও পয়েন্টকুট সংজ্ঞায়িত করে না, তারা ভবিষ্যতে এটি করতে পারে। অন্যদিকে @ রেপোসিটোরি ইতিমধ্যে বর্তমানে একটি পয়েন্টকটের জন্য লক্ষ্য। সেই পয়েন্টকুটটি ব্যতিক্রমী অনুবাদগুলির জন্য ব্যবহৃত হয়, অর্থাত্ সংযুক্তি এড়াতে আরও জেনেরিক স্প্রিং-ভিত্তিকগুলিতে প্রযুক্তি-নির্দিষ্ট ব্যতিক্রম অনুবাদ করার জন্য ting
স্টিভ্লো

3
@ স্টিভ্লো: আমি 'স্টেরিওটাইপ' শব্দটি বুঝতে চেষ্টা করেছি, এখনও বুঝতে পারি নি। আপনি দয়া করে এই পরিভাষাটি বুঝতে আমাকে সহায়তা করতে পারেন? এটি অনেক সাহায্য করে এবং আপনাকে অনেক ধন্যবাদ
প্রেমরাজ

2
@ xenoterracide আসলে ব্যবহারিকভাবে খুব বেশি পার্থক্য নেই। এর সাথে কিছু টীকাগুলি @Service হ'ল একটি @Component(কারণ @Serviceটীকাটি নিজেই এ্যানোটেট করা হয় @Component)। যতদূর আমি জানি, স্প্রিং ফ্রেমওয়ার্কের কোনও কিছুই স্পষ্টভাবে এই সত্যটি ব্যবহার করে যে কোনও কিছু হ'ল @Serviceতাই পার্থক্যটি কেবলমাত্র ধারণাগত।
জেস্পার

801

উত্তরগুলির মধ্যে অনেকগুলি ইতিমধ্যে জানিয়েছে যে এই টীকাগুলি কী জন্য ব্যবহৃত হয়, আমরা এখানে তাদের মধ্যে কিছু ছোটখাটো পার্থক্য ফোকাস করব।

প্রথম মিল

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


@ কম্পোনেন্ট, @ রিপোসিটোরি, @ কনট্রোলার এবং @ সার্ভিসের মধ্যে পার্থক্য

@উপাদান

এটি একটি সাধারণ-উদ্দেশ্যগত স্টেরিওটাইপ টীকা যা ইঙ্গিত করে যে ক্লাসটি একটি বসন্ত উপাদান।

বিশেষ কি @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 নিয়মাবলী উপর ভিত্তি করে। সুতরাং, কনভেনশনকে সম্মান করা এবং স্তরগুলির সাথে মিল রেখে এটি ব্যবহার করা সর্বদা একটি ভাল ধারণা।


জেপিএ সনাক্ত করা থাকলে 'পার্সিরিশনএক্সেপশন ট্রান্সলেশনপোস্টপ্রসেসর' স্বয়ংক্রিয়ভাবে নিবন্ধিত হবে।
ওলগা

21
কল্পনাপ্রসূত ব্যাখ্যা। আপনি আমার অনেক ভুল বুঝাবুঝি পরিষ্কার করেছেন। এমন একটি বিশ্ববিদ্যালয় থেকে আসছি যেখানে আমরা নীচে থেকে আমাদের সমস্ত প্রকল্পগুলি তৈরি করেছি, স্প্রিং অ্যাপ্লিকেশনগুলি কেন কেবল আপনার নিজের সাথে প্রোগ্রামটির সাথে লিঙ্ক না করানো সত্ত্বেও কেন কাজ করেছে তা বুঝতে আমার অসুবিধা হয়েছিল। টীকাগুলি এখন অনেক অর্থ দেয়, ধন্যবাদ!
নডজি গেমস

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

1
@Controllerটিকা সম্পর্কে কিছু ছোট ভুল তথ্য রয়েছে । ক্লাসটি যদি কোনওভাবে @RequestMappingএই শ্রেণীর বেনেটযুক্ত এবং বিন তৈরি করা হয় তবে এটি প্রয়োজন হয় না । @Controller ওআর দ্বারা বর্ণিত যে কোনও শিম @RequestMappingস্প্রিং এমভিসির অনুরোধ ম্যাপিংগুলিতে অংশ নেবে। উদাহরণস্বরূপ প্রোগ্রামিং হিসাবে কন্ট্রোলার তৈরি করতে (উদাহরণস্বরূপ @Beanপদ্ধতি ব্যবহার করা ) এবং একই সময়ে প্যাকেজ স্ক্যানের মাধ্যমে তাদের তৈরি করার চেষ্টা করে বসন্তকে প্রতিরোধ করতে (যদি প্যাকেজটি স্ক্যানিং থেকে বাদ দেওয়া যায় না) এটি দরকারী হতে পারে।
রুসলান স্টেলমাচেঙ্কো

1
এটি শীর্ষে জবাব দেওয়া উচিত - সমস্ত প্রশ্নের উত্তর দেয় এবং বেশ গভীর হয়। @ স্টিভ্লো প্রথম ওপি প্রশ্ন - প্রযুক্তিগত পার্থক্য সম্পর্কে খুব বেশি ব্যাখ্যা করেননি।
kiedysktos

430

তারা প্রায় একই - তাদের সবার অর্থ ক্লাসটি একটি বসন্ত বিন an @Service, @Repositoryএবং @Controllerবিশেষায়িত @Componentএস। আপনি তাদের সাথে নির্দিষ্ট ক্রিয়া সম্পাদন করতে বেছে নিতে পারেন। উদাহরণ স্বরূপ:

  • @Controller মটরশুটি বসন্ত-এমভিসি দ্বারা ব্যবহৃত হয়
  • @Repository মটরশুটি অধ্যবসায় ব্যতিক্রম অনুবাদ জন্য উপযুক্ত

আরেকটি বিষয় হ'ল আপনি উপাদানগুলিকে বিভিন্ন স্তরগুলিতে শব্দার্থভাবে নির্ধারণ করেন।

একটি জিনিস যা @Componentঅফার করে তা হ'ল আপনি এটির সাথে অন্য টীকাগুলি টিকা দিতে পারেন এবং তারপরে সেগুলি একইভাবে ব্যবহার করতে পারেন @Service

উদাহরণস্বরূপ আমি সম্প্রতি করেছি:

@Component
@Scope("prototype")
public @interface ScheduledJob {..}

সুতরাং সাথে বর্ণিত সমস্ত ক্লাসগুলি হ'ল @ScheduledJobবসন্ত বিন এবং এটি ছাড়াও কোয়ার্টজ কাজ হিসাবে নিবন্ধিত। আপনাকে কেবল এমন কোড সরবরাহ করতে হবে যা নির্দিষ্ট টীকাটি পরিচালনা করে।


1
@ কম্পোনেন্ট মানে কেবল একটি বসন্ত শিম, এটির জন্য অন্য কোনও উদ্দেশ্য?
কপিল দাস

21
@ উপাদান উপাদান মটরশুটিটি বসন্ত ধারক দ্বারা স্বয়ংক্রিয় সনাক্তযোগ্য। আপনার কনফিগারেশন ফাইলটিতে শিমটি সংজ্ঞায়িত করার দরকার নেই, এটি স্প্রিংয়ের সময় রানটাইমে স্বয়ংক্রিয়ভাবে সনাক্ত হবে।
আকাশ5288

1
আমি জেনেরিক @ কম্পোনেন্টটির বেশ পছন্দ ... বিশেষত @ স্কোপের সাথে কম্বোতে (প্রক্সিমোড = স্কোপডপ্রক্সি মোড .//MODE)
এডি বি

365

@ কম্পোনেন্টটি সমতুল্য

<bean>

@ সার্ভিস, @ কনট্রোলার, @ রিপোসিটোরি = {@ কম্পোনেন্ট + আরও কয়েকটি বিশেষ কার্যকারিতা}

এর অর্থ পরিষেবা, নিয়ন্ত্রণকারী এবং সংগ্রহস্থল কার্যত একই রকম।

তিনটি টিকা আপনার অ্যাপ্লিকেশনে "স্তরগুলি" আলাদা করতে ব্যবহৃত হয় ,

  • কন্ট্রোলাররা কেবল প্রেরণ, ফরোয়ার্ডিং, পরিষেবা পদ্ধতির কলিং ইত্যাদির মতো জিনিসগুলি করেন
  • পরিষেবা হোল্ড ব্যবসায় যুক্তি, গণনা ইত্যাদি Hold
  • সংগ্রহস্থল হ'ল ডিএও (ডেটা অ্যাক্সেস অবজেক্টস), তারা সরাসরি ডাটাবেস অ্যাক্সেস করে।

এখন আপনি তাদের জিজ্ঞাসা করতে পারেন কেন এগুলি পৃথক করুন: (আমি ধরে নিই যে আপনি AOP-Aspect Orimented প্রোগ্রামিং জানেন)

ধরা যাক আপনি কেবল ডিএও লেয়ারের ক্রিয়াকলাপ পর্যবেক্ষণ করতে চান। আপনি একটি অ্যাসপেক্ট (একটি শ্রেণি) শ্রেণি লিখবেন যা আপনার ডিএওর প্রতিটি পদ্ধতির আগে এবং পরে কিছু লগিং করে, আপনি তিনটি স্বতন্ত্র স্তর রয়েছে এবং মিশ্রিত না হওয়ায় আপনি এওপি ব্যবহার করতে সক্ষম হন।

সুতরাং আপনি ডিএও পদ্ধতিগুলি "কাছাকাছি", "আগে" বা "পরে" ডিএও পদ্ধতিতে লগিং করতে পারেন। আপনি এটি করতে পারতেন কারণ আপনার প্রথম স্থানে ডিএও ছিল। আপনি যা অর্জন করেছেন তা হ'ল উদ্বেগ বা কার্যগুলি পৃথকীকরণ।

ভাবুন যদি @ কন্ট্রোলার কেবল একটি টিকা থাকে তবে এই উপাদানটিতে প্রেরণ, ব্যবসায় যুক্তি এবং ডাটাবেস অ্যাক্সেসের সমস্ত মিশ্রিত, তাই নোংরা কোড থাকবে!

উপরে উল্লিখিতটি একটি খুব সাধারণ পরিস্থিতি, তিনটি টীকাগুলি কেন ব্যবহার করা হবে তার আরও অনেকগুলি ব্যবহারের ঘটনা রয়েছে।


6
আমি একটি মৌলিক প্রশ্ন পেয়েছি - স্প্রিং মেকানিজম দ্বারা টীকাগুলি ব্যবহার করা হয় বা সেগুলি কেবল প্রোগ্রামারকে মনে রাখতে পারে যে কোডগুলির টুকরাগুলি কী করে?
ব্যবহারকারী 107986

25
@ user107986 এগুলি মূলত প্রোগ্রামারটির জন্য অ্যাপ্লিকেশনটির স্তরগুলি মনে রাখে। তবে @Respositoryস্বয়ংক্রিয় ব্যতিক্রম অনুবাদ বৈশিষ্ট্যও রয়েছে। কোনও ক্ষেত্রে যখন ব্যতিক্রম ঘটে তখন @Repositoryসাধারণত সেই ব্যতিক্রমটির জন্য একটি হ্যান্ডলার থাকে এবং ডিএও শ্রেণিতে ট্রাই ক্যাচ ব্লক যুক্ত করার দরকার হয় না। এটি
অলিভার

আপনি কীভাবে সমস্ত "@ রিপোসিটোরি" শ্রেণীর জন্য একটি যৌথ পয়েন্ট লিখতে পারেন সে জন্য একটি নমুনা কোড লিখতে পারেন? হয় আমরা অভিব্যক্তি ব্যবহার করি বা শিমের নাম ব্যবহার করি তবে কীভাবে আমরা বলতে পারি যে এই পরামর্শটি সমস্ত "@ রিপোসিটরি" শ্রেণিতে প্রয়োগ করা হবে I আমি এর নমুনা পাওয়ার চেষ্টা করছিলাম কিন্তু সন্ধান করতে সক্ষম হলাম না our আপনার সাহায্যের সত্যই প্রশংসিত।
মনি

এছাড়াও, টীকাগুলি বর্তমানে একইভাবে কার্যকরভাবে কাজ করার সময়, ভবিষ্যতে নির্দিষ্ট গুণাবলীর জন্য নির্দিষ্ট কার্যকারিতা যুক্ত হতে পারে।
সিট্রাস

224

বসন্তে @Component, @Service, @Controller, এবং @Repositoryবাঁধাধরা টীকা জন্য ব্যবহার করা হয়, যা করা হয়:

@Controller:যেখানে উপস্থাপনা পৃষ্ঠা থেকে আপনার অনুরোধ ম্যাপিং সম্পন্ন হয়েছে অর্থাত্ উপস্থাপনা স্তরটি অন্য কোনও ফাইলে যাবে না এটি সরাসরি @Controllerশ্রেণিতে যায় এবং এনোটোটেশনে অনুরোধকৃত পথের জন্য পরীক্ষা করে @RequestMappingযা প্রয়োজনে পদ্ধতি কল করার আগে লেখা হয়েছিল written

@Service: সমস্ত ব্যবসায়ের যুক্তি এখানে অর্থাত্ ডেটা সম্পর্কিত গণনা এবং সমস্ত .এটি ব্যবসায় স্তরটির টীকা যাতে আমাদের ব্যবহারকারী সরাসরি অধ্যবসায় পদ্ধতি কল করে না তাই এটি এই টীকাকে ব্যবহার করে এই পদ্ধতিটিকে কল করবে। এটি ব্যবহারকারীর অনুরোধ অনুযায়ী @ রিপোসিটোরির জন্য অনুরোধ করবে

@Repository: এটি অ্যাপ্লিকেশনটির দৃ Pers়তা স্তর (ডেটা অ্যাক্সেস লেয়ার) যা ডেটাবেস থেকে ডেটা পাওয়ার জন্য ব্যবহৃত হত। অর্থাত্ ডেটাবেস সম্পর্কিত সমস্ত অপারেশন সংগ্রহস্থল দ্বারা সম্পন্ন হয়।

@Component - একটি উপাদান স্টেরিওটাইপ সহ আপনার অন্যান্য উপাদানগুলি (উদাহরণস্বরূপ REST রিসোর্স ক্লাস) এনেটেট করুন।

ইঙ্গিত করে যে কোনও টীকাগুলি শ্রেণি একটি " উপাদান "। টিকা-ভিত্তিক কনফিগারেশন এবং ক্লাসপাথ স্ক্যানিং ব্যবহার করার সময় এই জাতীয় ক্লাসগুলি স্বতঃ-সনাক্তকরণের প্রার্থী হিসাবে বিবেচিত হয়।

অন্যান্য শ্রেণি-স্তরের টীকাগুলিও একটি উপাদান চিহ্নিতকরণ হিসাবে বিবেচনা করা যেতে পারে, সাধারণত একটি বিশেষ ধরণের উপাদান: যেমন @ রিপোজিটরি টিকা বা এসপেক্টজ এর @ স্পষ্ট টিকা।

এখানে চিত্র বর্ণনা লিখুন


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

2
সমস্ত ব্যবসায়ের যুক্তি পরিষেবাগুলিতে যাওয়া উচিত নয় ! পরিষেবাদি, ডিডিডি-র ক্ষেত্রে, কেবলমাত্র একাধিক সত্তাকে প্রভাবিত করে এমন ডোমেন যুক্তিযুক্ত থাকা উচিত। উত্তর দেখার stackoverflow.com/a/41358034/238134
deamon

@ ডিমন হ্যাঁ তবে এটি বিকাশকারীদের পদ্ধতির উপর নির্ভর করে
হর্ষাল পাতিল ২ '

4
@ হর্ষালপ্যাটিল আপনি অবশ্যই পরিষেবাগুলিতে সমস্ত ব্যবসায়িক যুক্তি সহ একটি অ্যাপ্লিকেশন লিখতে পারেন, তবে এটি একটি রক্তাল্পতা ডোমেন মডেলের দিকে পরিচালিত করবে এবং সত্তাগুলিতে সীমাবদ্ধতা এবং দৃistence়তা প্রয়োগ করতে এটি অপ্রয়োজনীয় কঠোর হয়ে উঠবে।
ডিমন

1
অবশ্যই এটি বিকাশকারীদের পদ্ধতির উপর নির্ভর করে। সব কিছু করে। আপনি যদি ভুলভাবে সমস্যার কাছে যান, যেমন কোনও কাঠামো না দিয়ে যা চান তা লিখুন এবং এটি "আপনার পদ্ধতির" বলুন - যদিও এটি ঠিক তৈরি করে না। "ডান" এবং "ভুল" অবশ্যই ভাল সফ্টওয়্যার ডেভলপমেন্ট অনুশীলন যেমন SOLID এবং অন্যান্য নীতিগুলি হিসাবে বনাম খারাপ সফ্টওয়্যার অনুশীলনগুলি যেমন "আমি কেবল এটি এখনই এটি চাই" এবং অনুরূপ হিসাবে বর্ণনা করার জন্য ব্যবহার করা হচ্ছে।
milosmns

71

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

@Component  Indicates a auto scan component.
@Repository  Indicates DAO component in the persistence layer.
@Service  Indicates a Service component in the business layer.
@Controller  Indicates a controller component in the presentation layer.

রেফারেন্স: - স্প্রিং ডকুমেন্টেশন - জাভা ব্যবহার করে ক্লাসপাথ স্ক্যানিং, পরিচালিত উপাদান এবং রচনা কনফিগারেশন


48

টেকনিক্যালি @Controller, @Service, @Repositoryসবাই একই রকম। তাদের সমস্ত প্রসারিত @Component

বসন্তের উত্স কোড থেকে:

ইঙ্গিত করে যে কোনও টীকাগুলি শ্রেণি একটি "উপাদান"। টিকা-ভিত্তিক কনফিগারেশন এবং ক্লাসপাথ স্ক্যানিং ব্যবহার করার সময় এই জাতীয় ক্লাসগুলি স্বতঃ-সনাক্তকরণের প্রার্থী হিসাবে বিবেচিত হয়।

আমরা সরাসরি ব্যবহার করতে পারেন @Componentপ্রতিটি শিম জন্য, কিন্তু ভালো বোঝার এবং বৃহৎ আবেদন maintainability জন্য, আমরা ব্যবহার @Controller, @Service, @Repository

প্রতিটি টীকাটির উদ্দেশ্য:

  1. @Controller-> এটি দিয়ে টীকায়িত ক্লাসগুলি ক্লায়েন্টের পক্ষ থেকে একটি অনুরোধ গ্রহণের উদ্দেশ্যে। প্রথম অনুরোধটি ডিসপ্যাচার সার্ভলেটে আসে, সেখান থেকে টীকাটির মান ব্যবহার করে অনুরোধটি নির্দিষ্ট নিয়ামকের কাছে যায় @RequestMapping
  2. @Service-> এর সাথে টীকাযুক্ত ক্লাসগুলি ডেটা ম্যানিপুলেট করার উদ্দেশ্যে করা হয়, যা আমরা ক্লায়েন্টের কাছ থেকে পাই বা ডাটাবেস থেকে আনতে পারি। ডেটা সহ সমস্ত ম্যানিপুলেশন এই স্তরটিতে করা উচিত।
  3. @Repository-> এটি দিয়ে টীকায়িত ক্লাসগুলি ডেটাবেসের সাথে সংযোগ স্থাপনের উদ্দেশ্যে। এটি ডিএও (ডেটা অ্যাক্সেস অবজেক্ট) স্তর হিসাবেও বিবেচিত হতে পারে। এই স্তরটি কেবলমাত্র CRUD (তৈরি, পুনরুদ্ধার, আপডেট, মোছা) অপারেশনে সীমাবদ্ধ করা উচিত। যদি কোনও হেরফের প্রয়োজন হয় তবে ডেটা প্রেরণ করা উচিত @ সার্ভিস স্তরটিতে প্রেরণ করতে।

যদি আমরা তাদের জায়গায় ( @Repositoryএর জায়গায় ব্যবহার করে @Controller) বিনিময় করি তবে আমাদের অ্যাপ্লিকেশনটি ঠিকঠাক কাজ করবে।

তিনটি আলাদা ব্যবহারের মূল উদ্দেশ্য @annotationsহ'ল এন্টারপ্রাইজ অ্যাপ্লিকেশনটিতে আরও ভাল মডুলারিটি সরবরাহ করা।


2
ইন্টারচেঞ্জিং জায়গাগুলি প্রতিস্থাপনের অর্থ কী? controller and repository
আশীষ কম্বলে

46

ডাটাবেস সংযোগের দৃষ্টিকোণ থেকে ব্যবহার @Serviceএবং @Repositoryটীকাগুলি গুরুত্বপূর্ণ।

  1. আপনার @Serviceসমস্ত ওয়েব পরিষেবা ধরণের ডিবি সংযোগের জন্য ব্যবহার করুন
  2. আপনার @Repositoryসমস্ত সঞ্চিত প্রোক ডিবি সংযোগের জন্য ব্যবহার করুন

আপনি যদি যথাযথ টীকাগুলি ব্যবহার না করেন, আপনি রোলব্যাক লেনদেনের দ্বারা বাদ দেওয়া প্রতিশ্রুতিগুলির মুখোমুখি হতে পারেন। স্ট্রেস লোড পরীক্ষার সময় আপনি ব্যতিক্রমগুলি দেখতে পাবেন যা জেডিবিসি লেনদেনের সাথে সম্পর্কিত।


@ রিপোসিটরিটি ডিবি অপারেশনগুলির পরিবর্তে রেস্ট্যাপি কলগুলির জন্য ব্যবহার করা যেতে পারে?
ন:

@ নাeম প্রযুক্তিগতভাবে আপনি পরিষেবাগুলি হিসাবে নিয়ন্ত্রক এবং সংগ্রহস্থল হিসাবে পরিষেবাগুলি বর্ণনা করতে পারেন, নির্ভরতা ইনজেকশন ঠিক একই কাজ করবে। তবে আপনি কেন কখনও এমন করবেন? যদি এটি ডাটাবেস সত্তাগুলির সাথে কাজ না করে - এটি কোনও সংগ্রহস্থল নয় এবং @Repositoryবিশেষত দৃ pers়তা স্তর সহ কাজ করার জন্য ডিজাইন করা হয়েছে। আপনি যদি বাকী এপিআই নিয়ে কাজ করছেন - আপনি ডিএও'র নয়, ডিটিও'র সাথে কাজ করছেন।
বেন

28

@ রিপোসিটরি @ সার্ভিস এবং @ কন্ট্রোলার এই ভিত্তিতে আরও নির্দিষ্ট ব্যবহারের জন্য @ কমপোমেন্টের বিশেষীকরণ হিসাবে কাজ করে তবে আপনি @ সার্ভিসকে @ কমপোয়েন্টে প্রতিস্থাপন করতে পারেন তবে এই ক্ষেত্রে আপনি বিশেষত্বটি looseিলা করবেন।

1. **@Repository**   - Automatic exception translation in your persistence layer.
2. **@Service**      - It indicates that the annotated class is providing a business service to other layers within the application.

27

এই সমস্ত টীকাগুলি ধরণের স্টেরিও টাইপ ধরণের টিকা, এই তিনটি টীকাগুলির মধ্যে পার্থক্য

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

উদাহরণ স্বরূপ

package com.spring.anno;
@Service
public class TestBean
{
    public void m1()
    {
       //business code
    }
}

package com.spring.anno;
@Repository
public class TestBean
{
    public void update()
    {
       //persistence code
    }
}
  • যখনই আমরা ডিফল্ট টীকা দ্বারা @Serviceবা @Repositroyবা @Controllerটীকা যুক্ত করি @Componentতখন ক্লাসের শীর্ষে উপস্থিত হয়

23

স্প্রিং স্বয়ংক্রিয় উপাদান টীকা স্ক্যানের চারটি ভিন্ন ধরনের প্রদান করে, তারা @Component, @Service, @Repositoryএবং @Controller। প্রযুক্তিগতভাবে, তাদের মধ্যে কোনও পার্থক্য নেই, তবে প্রতিটি অটো উপাদান উপাদান স্ক্যান টীকাগুলি একটি বিশেষ উদ্দেশ্যে এবং সংজ্ঞায়িত স্তরটির মধ্যে ব্যবহার করা উচিত।

@Component: এটি একটি বেসিক অটো উপাদান স্ক্যান টীকাগুলি, এটি নির্দেশ করে শ্রেণিটি একটি অটো স্ক্যান উপাদান indicates

@Controller: টীকাগুলি শ্রেণি নির্দেশ করে যে এটি একটি নিয়ামক উপাদান এবং মূলত উপস্থাপনা স্তরে ব্যবহৃত হয়।

@Service: এটি নির্দেশ করে যে শ্রেণিটি ব্যবসায়ের স্তরের একটি পরিষেবা উপাদান indicates

@Repository: আপনার এই টীকাটি অধ্যবসায় স্তরের মধ্যে ব্যবহার করা দরকার, এটি ডাটাবেস সংগ্রহস্থলের মতো কাজ করে।

@Componentতাদের ক্লাসটি টিকা দেওয়ার সময় আরও একটি বিশেষ ফর্ম নির্বাচন করা উচিত কারণ এই টীকাটিতে নির্দিষ্ট আচরণটি এগিয়ে যেতে পারে।


20

আমরা জবা স্ট্যান্ডার্ড অনুযায়ী এর উত্তর দিতে পারি

উল্লেখ করা JSR-330, যা এখন বসন্ত দ্বারা সমর্থিত, আপনি কেবল @Namedএকটি সিম (কোনওভাবে @Named=@Component) সংজ্ঞায়িত করতে ব্যবহার করতে পারেন । এই মান অনুযায়ী সুতরাং, মনে হচ্ছে ছকের (যেমন সংজ্ঞায়িত করতে কোন ব্যবহার নেই @Repository, @Service, @Controller) বিভাগ মটরশুটি করতে।

তবে স্প্রিং ব্যবহারকারীরা নির্দিষ্ট ব্যবহারের জন্য এই বিভিন্ন টীকাগুলি পৃথকভাবে উদাহরণস্বরূপ:

  1. সক্ষমদের জন্য আরও ভাল বিভাগ নির্ধারণে বিকাশকারীদের সহায়তা করুন। এই শ্রেণিবদ্ধকরণ কিছু ক্ষেত্রে সহায়ক হতে পারে। (উদাহরণস্বরূপ আপনি যখন ব্যবহার করছেন তখন aspect-orientedএগুলি ভাল প্রার্থী হতে পারে pointcuts)
  2. @Repository টীকাগুলি আপনার শিমের সাথে কিছু কার্যকারিতা যুক্ত করবে (আপনার শিমের অধ্যবসায় স্তরে কিছু স্বয়ংক্রিয় ব্যতিক্রম অনুবাদ)।
  3. আপনি যদি বসন্তের এমভিসি ব্যবহার করে থাকেন তবে @RequestMappingকেবলমাত্র ক্লাসগুলিতে এন্ডোট করা যেতে পারে যা দ্বারা টীকাগুলি রয়েছে @Controller

আপনার তৃতীয় দফা সম্পর্কিত Regarding এটা সত্যি না. আমি সার্ভিস ক্লাসের অধীনে থাকা পদ্ধতিগুলিতে এমনকি @RequestMapping টীকাগুলি যুক্ত করতে পারি (আমার মানে ক্লাসগুলি @ সার্ভিস দ্বারা টীকাযুক্ত)।
রাহুল গুপ্ত

19

@ কম্পোমেন্টের সাথে অন্যান্য উপাদানগুলি টীকাগুলি করুন, উদাহরণস্বরূপ REST রিসোর্স ক্লাস।

@Component
public class AdressComp{
    .......
    ...//some code here    
}

@ কম্পোনেন্টটি কোনও বসন্ত পরিচালিত উপাদানগুলির জন্য একটি জেনেরিক স্টেরিওটাইপ।

@ কনট্রোলার, @ সার্ভিস এবং @ রিপোসিটোরি নির্দিষ্ট ব্যবহারের ক্ষেত্রে @ কমপোয়েন্টের বিশেষীকরণ।

@ স্প্রিং এর অংশ

"উপাদান বিশেষায়িতকরণ"


18

তার মাঝে কোন পার্থক্য নেই @Component, @Service, @Controller, @Repository@Componentআমাদের এমভিসির উপাদানটি উপস্থাপন করার জন্য জেনেরিক টিকা। তবে আমাদের এমভিসি অ্যাপ্লিকেশনের অংশ হিসাবে পরিষেবা স্তর উপাদান, অধ্যবসায় স্তর উপাদান এবং উপস্থাপনা স্তর উপাদানগুলির বেশ কয়েকটি উপাদান থাকবে। সুতরাং তাদের পার্থক্য করতে বসন্তের মানুষ অন্য তিনটি টিকাও দিয়েছেন।

  • অধ্যবসায় স্তর উপাদান প্রতিনিধিত্ব করতে: @Repository
  • পরিষেবা স্তর উপাদান প্রতিনিধিত্ব করতে: @Service
  • উপস্থাপনা স্তর উপাদান উপস্থাপন করতে: @Controller
  • অন্যথায় আপনি @Componentতাদের সবার জন্য ব্যবহার করতে পারেন ।

17

এমনকি আমরা @ কম্পিউটার বা @ রিপোসিটোরি বা @ রক্ষণাবেক্ষণের বিনিময় করি

এটি একই রকম আচরণ করবে তবে একটি দিক হ'ল আমরা উপাদান বা @ পরিষেবা ব্যবহার করি তবে তারা সংগ্রহস্থলের পরিবর্তে ডিএও সম্পর্কিত কিছু নির্দিষ্ট ব্যতিক্রম ধরতে সক্ষম হবে না


15

স্প্রিং 4 এ, সর্বশেষ সংস্করণ:

@ রিপোসিটরি টিকা হ'ল কোনও শ্রেণীর জন্য চিহ্নিতকারী যা কোনও সংগ্রহস্থলের ভূমিকা বা স্টেরিওটাইপ পূরণ করে (এটি ডেটা অ্যাক্সেস অবজেক্ট বা ডিএও নামেও পরিচিত)। এই চিহ্নিতকারীটির ব্যবহারগুলির মধ্যে রয়েছে ধারা 20.2.2, "ব্যতিক্রম অনুবাদ" তে বর্ণিত ব্যতিক্রমগুলির স্বয়ংক্রিয় অনুবাদ।

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


15

@ কম্পোনেন্ট : আপনি একটি ক্লাস টিকিয়ে দিন@Component , হাইবারনেটকে বলে যে এটি একটি বিন।

@ রিপোসিটোরি : আপনি একটি শ্রেণি বেনিফিট করেন@Repository , এটি হাইবারনেটকে বলে এটি একটি ডিএও শ্রেণি এবং এটি ডিএও শ্রেণি হিসাবে বিবেচনা করে। এর অর্থ এটি চেক করা ব্যতিক্রমগুলি (ডিএও পদ্ধতি থেকে নিক্ষিপ্ত) বসন্তে অনুবাদ করার যোগ্য করে তোলে DataAccessException

@ সার্ভিস : এটি হাইবারনেটকে বলেছে এটি একটি পরিষেবা শ্রেণি যেখানে আপনার @Transactionalইত্যাদি পরিষেবা স্তর টিকা আছে যাতে হাইবারনেট এটিকে পরিষেবা উপাদান হিসাবে বিবেচনা করে।

প্লাস @Serviceএর অগ্রিম হয় @Component। ধরে নিন শিমের বর্গের নাম CustomerService, যেহেতু আপনি এক্সএমএল বিন কনফিগারেশন পদ্ধতিটি পছন্দ করেন নি তাই আপনি বিনকে বিন @Componentহিসাবে ইঙ্গিত করার জন্য শিরোনাম দিয়েছিলেন। সুতরাং শিমের অবজেক্টটি CustomerService cust = (CustomerService)context.getBean("customerService");ডিফল্টরূপে পাওয়ার পরে , স্প্রিংটি উপাদানটির প্রথম চরিত্রকে কমিয়ে দেবে - 'গ্রাহকসেবা' থেকে 'গ্রাহকসেবা' পর্যন্ত। এবং আপনি এই নামটি 'গ্রাহকসেবা' দিয়ে পুনরুদ্ধার করতে পারেন। তবে আপনি যদি @Serviceবিন বিনের জন্য টীকাটি ব্যবহার করেন তবে আপনি নির্দিষ্ট শিমের নাম সরবরাহ করতে পারেন

@Service("AAA")
public class CustomerService{

এবং আপনি বিন শিমটি পেতে পারেন

CustomerService cust = (CustomerService)context.getBean("AAA");

13

@Component শীর্ষ স্তরের জেনেরিক টীকাগুলি যা টীকাগুলি মটরশুটি স্ক্যান করে ডিআই পাত্রে উপলব্ধ করে

@Repository এটি বিশেষায়িত টীকা এবং এটি ডিএও ক্লাস থেকে সমস্ত চেক না করা ব্যতিক্রম রূপান্তর করার বৈশিষ্ট্য নিয়ে আসে

@Serviceবিশেষায়িত টিকা। এটি এখন পর্যন্ত কোনও নতুন বৈশিষ্ট্য নিয়ে আসে না তবে এটি শিমের উদ্দেশ্যটি স্পষ্ট করে

@ কনট্রোলার বিশেষায়িত টীকাগুলি যা শিম এমভিসিকে সচেতন করে তোলে এবং এর মতো আরও @RequestMappingসমস্ত টিকা ব্যবহারের অনুমতি দেয়

আরও বিশদ এখানে


11

একটি @Serviceবসন্তের ডকুমেন্টেশন উদ্ধৃতি,

ইঙ্গিত করে যে কোনও টীকাগুলি শ্রেণি একটি "পরিষেবা", মূলত ডোমেন-ড্রাইভড ডিজাইন (ইভান্স, 2003) দ্বারা সংজ্ঞায়িত করা হয়েছে "একটি ইন্টারফেস হিসাবে দেওয়া একটি অপারেশন যা কোনও মডেলের মধ্যে একা দাঁড়িয়ে আছে, কোনও এনক্যাপসুলেটেড অবস্থায় নেই with" ক্লাসটি একটি "বিজনেস সার্ভিস ফেকাড" (কোর জে 2 ই ই প্যাটার্ন অর্থে) বা এর অনুরূপও নির্দেশ করতে পারে। এই টিকাটি একটি সাধারণ-উদ্দেশ্যগত স্টেরিওটাইপ এবং পৃথক দলগুলি তাদের শব্দার্থবিজ্ঞানগুলি সংকীর্ণ করতে এবং যথাযথ হিসাবে ব্যবহার করতে পারে।

আপনি যদি এরিক ইভান্স দ্বারা ডোমেন চালিত নকশার দিকে নজর দেন,

একটি সার্ভিস হল এমন একটি ক্রিয়াকলাপ যা ইন্টারফেস হিসাবে প্রস্তাব করা হয় যা মডেলটিতে একা থাকে, এনক্যাপসুলেটটিং স্টেট না করে যেমন ENTITIES এবং VALUE OBJECTS করে। প্রযুক্তিগত ফ্রেমওয়ার্কগুলিতে পরিষেবাগুলি একটি সাধারণ প্যাটার্ন, তবে তারা ডোমেন স্তরেও প্রয়োগ করতে পারে। নাম পরিষেবাটি অন্য বস্তুর সাথে সম্পর্কের উপর জোর দেয়। ENTITIES এবং VALUE OBJECTS এর বিপরীতে, এটি ক্লায়েন্টের জন্য কী করতে পারে তার নিখুঁতভাবে এটি সংজ্ঞায়িত করা হয়। একটি সার্ভিস কোনও সত্ত্বার চেয়ে একটি ক্রিয়াকলাপের জন্য নামকরণ করতে চায় n বিশেষ্যর পরিবর্তে একটি ক্রিয়া। একটি পরিষেবা এখনও একটি বিমূর্ত, ইচ্ছাকৃত সংজ্ঞা থাকতে পারে; এটির কোনও জিনিসের সংজ্ঞা থেকে আলাদা স্বাদ আছে। একটি পরিষেবা এখনও একটি সংজ্ঞায়িত দায়িত্ব থাকা উচিত, এবং সেই দায়িত্ব এবং এটি পূরণকারী ইন্টারফেসটি ডোমেন মডেলের অংশ হিসাবে সংজ্ঞায়িত করা উচিত। অপারেশন নামগুলি ইউবিআইকিউইটি ভাষা থেকে আসা উচিত বা এটিতে প্রবর্তন করা উচিত। প্যারামিটার এবং ফলাফলগুলি ডোমেন অবজেক্ট হওয়া উচিত। পরিষেবাদিগুলি ন্যায়বিচারের সাথে ব্যবহার করা উচিত এবং তাদের সমস্ত আচরণের ENTITIES এবং ভ্যালু অবজেক্টগুলি কেড়ে ফেলার অনুমতি দেওয়া উচিত নয়। কিন্তু যখন কোনও অপারেশন আসলে একটি গুরুত্বপূর্ণ ডোমেন ধারণা হয়, একটি সার্ভিস একটি মডেল-ড্রাইভ ডিজাইনের একটি প্রাকৃতিক অংশ গঠন করে। মডেলটিতে সার্ভিস হিসাবে ঘোষিত, এমন কোনও ফনি অবজেক্ট হিসাবে যা আসলে কোনও কিছুই উপস্থাপন করে না, স্বতন্ত্র অপারেশন কাউকে বিভ্রান্ত করবে না। একটি পরিষেবা মডেল-চালিত ডিজাইনের একটি প্রাকৃতিক অংশ গঠন করে। মডেলটিতে সার্ভিস হিসাবে ঘোষিত, এমন কোনও ফনি অবজেক্ট হিসাবে যা আসলে কোনও কিছুই উপস্থাপন করে না, স্বতন্ত্র অপারেশন কাউকে বিভ্রান্ত করবে না। একটি পরিষেবা একটি মডেল-চালিত ডিজাইনের একটি প্রাকৃতিক অংশ গঠন করে। মডেলটিতে সার্ভিস হিসাবে ঘোষিত, এমন কোনও ফনি অবজেক্ট হিসাবে যা আসলে কোনও কিছুই উপস্থাপন করে না, স্ট্যান্ডএলোন অপারেশন কাউকে বিভ্রান্ত করবে না।

এবং Repositoryএরিক ইভান্স অনুযায়ী একটি ,

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


11

কম্পোনেন্ট-রিপোজিটরি-পরিষেবা-টিকা-র মধ্যে পার্থক্য কী তা বোঝাতে এখানে যথেষ্ট ভাল উত্তর রয়েছে। আমি পার্থক্য ভাগ করতে চাই@Controller & @RestController

@Controller বনাম RestController

@RestController:

এখানে চিত্র বর্ণনা লিখুন

  • এই টীকা একটি বিশেষ সংস্করণ রয়েছে @Controllerযা যোগ করা @Controllerএবং @ResponseBodyটীকা স্বয়ংক্রিয়ভাবে। সুতরাং @ResponseBodyআমাদের ম্যাপিং পদ্ধতিগুলিতে আমাদের যুক্ত করতে হবে না । এর অর্থ @ResponseBodyডিফল্ট সক্রিয়।
  • আপনি যদি ব্যবহার করেন তবে আপনি @RestControllerকোনও দর্শন ( Viewresolverস্প্রিং / স্প্রিং-বুটে ব্যবহার করে ) ফেরত দিতে পারবেন না
  • @RestControllerপ্রতিক্রিয়াটিকে এমন JSON/XML automaticallyরূপে রূপান্তরিত করে @ResponseBodyযা প্রত্যাবর্তিত বস্তুগুলিকে এমন কিছুতে পরিণত করে যা শরীরে থাকতে পারে,e.g. JSON or XML

@Controller

এখানে চিত্র বর্ণনা লিখুন

  • @Controllerক্লাসগুলি স্প্রিং এমভিসি কন্ট্রোলার হিসাবে চিহ্নিত করতে ব্যবহৃত হয়। এই টীকাটি কেবল একটি বিশেষ সংস্করণ @Componentএবং এটি নিয়ামক শ্রেণিকে ক্লাসপাথ স্ক্যানিংয়ের উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে সনাক্ত করতে দেয়।
  • @Controller আপনি স্প্রিং ওয়েব এমভিসিতে একটি দৃশ্য ফিরে আসতে পারেন।

আরও বিস্তারিত দেখুন


9

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


6

স্টেরিওটাইপগুলির ব্যাখ্যা:

  • @Service- আপনার সমস্ত পরিষেবা ক্লাস @ সার্ভিস সহ টীকা দিন। এই স্তরটি কাজের একক জানে। আপনার সমস্ত ব্যবসায়ের যুক্তি পরিষেবা শ্রেণিতে থাকবে। সাধারণত পরিষেবা স্তর পদ্ধতিগুলি লেনদেনের আওতায় আসে। আপনি পরিষেবা পদ্ধতি থেকে একাধিক ডিএও কল করতে পারেন, যদি কোনও লেনদেন ব্যর্থ হয় তবে সমস্ত লেনদেনের রোলব্যাক করা উচিত।
  • @Repository- আপনার সমস্ত ডিএও ক্লাসকে @ রিপোসিটোরির সাহায্যে টিক দিন। আপনার সমস্ত ডাটাবেস অ্যাক্সেস যুক্তি ডিএও ক্লাসে থাকা উচিত।
  • @Component - উপাদান স্টেরিওটাইপ সহ আপনার অন্যান্য উপাদানগুলি (উদাহরণস্বরূপ REST রিসোর্স ক্লাসগুলি) এনেটেট করুন।
  • @Autowired - স্প্রিংকে অটো-ওয়্যারটি অন্য মটরশুটিগুলি আপনার ক্লাসে @ অটোভায়ার্ড টীকাগুলি ব্যবহার করতে দিন।

@Componentযে কোনও বসন্ত-পরিচালিত উপাদানগুলির জন্য জেনেরিক স্টেরিওটাইপ। @Repository, @Service, এবং @Controllerএর বিশেষায়িত হয় @Componentআরো নির্দিষ্ট ব্যবহারের ক্ষেত্রে জন্য উদাহরণস্বরূপ, অধ্যবসায়, সেবা, এবং উপস্থাপনা স্তর যথাক্রমে।

মূলত এখানে উত্তর ।


5

@ কম্পোনেন্ট, @ রিপোসিটোরি, @ কনট্রোলার এবং @ সার্ভিস টিকাতে পার্থক্য

@ উপাদান - জেনেরিক এবং অ্যাপ্লিকেশন জুড়ে ব্যবহার করা যেতে পারে।
@ সার্ভিস - সার্ভিস লেয়ার স্তরে ক্লাস টিকিয়ে দিন।
@ নিয়ন্ত্রক - মূলত বসন্ত এমভিসিতে ব্যবহৃত উপস্থাপনা স্তর স্তরের ক্লাস টিকা দিন।
@ রিপোজিটরি - অধ্যবসায় স্তরে ক্লাস টিকিয়ে দিন, যা ডাটাবেস সংগ্রহস্থল হিসাবে কাজ করবে।

@Controller= @ উপাদান (অভ্যন্তরীণ টিকা) + উপস্থাপনা স্তর বৈশিষ্ট্য
@Service= @ উপাদান (অভ্যন্তরীণ টিকা) + পরিষেবা স্তর বৈশিষ্ট্য
@Component= প্রকৃত উপাদান (মটরশুটি)
@Repository= @ উপাদান (অভ্যন্তরীণ টিকা) + ডেটা স্তর বৈশিষ্ট্য (ডোমেন বিনগুলি পরিচালনা করার জন্য ব্যবহার)


3

বসন্ত ফ্রেমওয়ার্কে কিছু বিশেষ ধরণের টিকা সরবরাহ করা হয়, যাকে বলা হয় স্টেরিওটাইপ টিকা। এগুলি নিম্নলিখিত:

@RestController- Declare at controller level.
@Controller  Declare at controller level.
@Component  Declare at Bean/entity level.
@Repository  Declare at DAO level.
@Service  Declare at BO level.

উপরের ঘোষিত টীকাগুলি বিশেষ কারণ কারণ যখন আমরা <context:component-scan>এক্সএক্সএক্সএক্সএল - সার্লেট.এক্সএমএল ফাইল যুক্ত করি, তখন স্প্রিং স্বয়ংক্রিয়ভাবে সেই শ্রেণীর অবজেক্ট তৈরি করে which


2

@Component, @ Repository, @ Service, @Controller:

@Componentউপাদান দ্বারা পরিচালিত জন্য একটি জেনেরিক বাঁধাধরা হয় স্প্রিং @Repository, @Serviceএবং @Controllerহয় @Componentআরো নির্দিষ্ট ব্যবহারের জন্য বিশেষায়িত:

  • @Repository অধ্যবসায়ের জন্য
  • @Service পরিষেবা এবং লেনদেনের জন্য
  • @Controller এমভিসি নিয়ন্ত্রণকারীদের জন্য

কেন ব্যবহার @Repository, @Service, @Controllerওভার @Component? আমরা আমাদের কম্পোনেন্টগুলির সাথে আমাদের উপাদানগুলির ক্লাসগুলি চিহ্নিত করতে পারি, তবে পরিবর্তে আমরা যদি বিকল্পটি ব্যবহার করি যা প্রত্যাশিত কার্যকারিতার সাথে মানিয়ে নেয়। আমাদের ক্লাসগুলি প্রতিটি বিশেষ ক্ষেত্রে প্রত্যাশিত কার্যকারিতার সাথে আরও উপযুক্ত।

@RepositoryOrg.springframework.dao.DataAccessException এর সাহায্যে বর্ণিত একটি শ্রেণীর আরও ভাল অনুবাদ এবং পঠনযোগ্য ত্রুটি রয়েছে। ডেটা অ্যাক্সেস করে এমন উপাদানগুলি প্রয়োগ করার জন্য আদর্শ (ডেটাঅ্যাক্সেসঅবজেক্ট বা ডিএও)।

একটি এন্টারোটেড ক্লাস @Controllerএকটি স্প্রিং ওয়েব এমভিসি অ্যাপ্লিকেশনে নিয়ামক ভূমিকা পালন করে

@Serviceব্যবসায়িক যুক্তি পরিষেবাদিতে ভূমিকা রাখে এমন একটি টীকাযুক্ত শ্রেণি উদাহরণস্বরূপ, ডিএও ম্যানেজারের জন্য মুখের প্যাটার্ন (ফ্যাসেড) এবং লেনদেন পরিচালনা


2

এখানে উপস্থাপিত উত্তরগুলি মূলত প্রযুক্তিগতভাবে সঠিক, তবে প্রতিক্রিয়া তালিকাটি দীর্ঘ হলেও এটি নীচে থাকবে যদিও আমি ভেবেছিলাম যে এখানে কোনও সত্যিকারের প্রতিক্রিয়া রাখার উপযুক্ত ছিল, কেবল যদি কেউ এর উপর হোঁচট খায় এবং এর থেকে মূল্যবান কিছু শিখেন তবে এটা। এটি নয় যে বাকী উত্তরগুলি ভুল, কেবল এটি সঠিক নয়। এবং, ট্রলের দলকে থামানোর জন্য, হ্যাঁ, আমি জানি যে প্রযুক্তিগতভাবে এই টীকাগুলি কার্যকরভাবে একই জিনিস এবং এমনকি বসন্ত ৫ পর্যন্ত সবচেয়ে বিনিময়যোগ্য Now এখন, সঠিক উত্তরের জন্য:

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

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

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

আমি অন্য উদাহরণগুলিতে যাব না, তবে আমি যতটা স্পষ্টভাবে বলতে পারবো: এই টীকাগুলি সম্পূর্ণ আলাদা জিনিস এবং তাদের উদ্দেশ্য হিসাবে যথাযথভাবে ব্যবহার করা উচিত। @Repositoryস্টোরেজ সংগ্রহস্থলের জন্য এবং অন্য কোনও টীকা সঠিক নয়। @Serviceপরিষেবাগুলির জন্য এবং অন্য কোনও টীকা সঠিক নয়। @Componentএটি এমন উপাদানগুলির জন্য যা না হয় পুনরায় পোস্টারগুলি বা পরিষেবাগুলি হয় এবং এর পরিবর্তে এর কোনওটি ব্যবহার করাও ভুল হবে। এটি সংকলন করতে পারে, এটি আপনার পরীক্ষাগুলি চালিয়ে এমনকি পাসও করতে পারে তবে এটি ভুল হবে এবং আপনি যদি এটি করতে থাকেন তবে আমি আপনাকে (পেশাগতভাবে) কম মনে করব।

পুরো বসন্ত জুড়ে এর উদাহরণ রয়েছে (এবং সাধারণভাবে প্রোগ্রামিং)। @Controllerএকটি REST এপিআই লেখার সময় আপনার অবশ্যই ব্যবহার করা উচিত নয় , কারণ @RestControllerএটি উপলব্ধ। কোনও বৈধ বিকল্প @RequestMappingহলে আপনার অবশ্যই ব্যবহার করা উচিত নয় @GetMapping। ইত্যাদি ইত্যাদি ইত্যাদি আপনার পাঠকদের সাথে আপনার অভিপ্রায়টি জানানোর জন্য আপনার অবশ্যই সুনির্দিষ্ট সঠিক এবং সঠিক ভাষাটি বেছে নিতে হবে , অন্যথায়, আপনি আপনার সিস্টেমে ঝুঁকিগুলি প্রবর্তন করছেন, এবং ঝুঁকির জন্য একটি ব্যয় রয়েছে।


ভাল বলেছেন এবং ভাল পয়েন্ট!
অ্যান্ডি

1

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

এখন প্রতিটি এক সরানো যাক; প্রথম @ সার্ভিস , আপনি যদি নির্দিষ্ট ব্যবসায়ের ক্ষেত্রে কিছু যুক্তি তৈরি করে থাকেন তবে আপনার জায়গাটি আপনার ব্যবসায়ের যুক্তিযুক্ত এমন জায়গায় আলাদা করতে হবে, এই পরিষেবাটি সাধারণ শ্রেণি বা আপনি চাইলে এটি ইন্টারফেস হিসাবে ব্যবহার করতে পারেন, এবং এটি লিখিত আছে যেমন এই

@Service
public class Doer {
   // Your logic 
}

// To use it in another class, suppose in Controller 
@Controller
public class XController {
 // You have to inject it like this 
 @Autowired 
 private Doer doer;
}

আপনি যখন এটি ইনজেকশন করেন তখন সমস্ত একইভাবে হয়, @ রিপোসিটরি এটি এমন একটি ইন্টারফেস যা রেপোজিটরি প্যাটার্ন রিপোজিটরি ডিজাইনের প্যাটার্ন প্রয়োগ করে , সাধারণত যখন আপনি কিছু ডেটা স্টোর বা ডাটাবেস নিয়ে কাজ করেন তখন এটি ব্যবহার করা হয় এবং আপনি দেখতে পাবেন যে এতে একাধিক আপনার ডাটাবেস ক্রিয়াকলাপ পরিচালনা করার জন্য প্রস্তুত বাস্তবায়ন; এটি ক্রুডেপোসিটোরি , জেপাআরপোসিটোরি ইত্যাদি হতে পারে

// For example
public interface DoerRepository implements JpaRepository<Long, XEntity> {}

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


0

@ কম্পোনেন্ট কনফিগারেশন ক্লাসে বিয়ান টিকা হিসাবে কাজ করে, বসন্তের প্রসঙ্গে শিমটি রেজিস্টার করে। এছাড়াও এটি @ সার্ভিস, @ রিপোসিটোরি এবং @ কন্ট্রোলার টিকা র জন্য পিতামাতার।

@ সার্ভিস , @ কম্পোনেন্ট টীকা প্রসারিত এবং কেবল নামকরণের পার্থক্য রয়েছে।

@ রিপোসিটোরি - @ কম্পোনেন্ট টীকা প্রসারিত করে এবং সমস্ত ডাটাবেস ব্যতিক্রমকে ডেটাএ্যাকসেসে এক্সসেপশনে অনুবাদ করে ।

@ নিয়ন্ত্রণকারী - এমভিসি প্যাটার্নে নিয়ামক হিসাবে কাজ করে। প্রেরণকারী ম্যাপ করা পদ্ধতিগুলির জন্য এমন এনোটোটেড ক্লাসগুলি স্ক্যান করবে, @RequestMapping টীকা সনাক্ত করে।


-13
@Component
@Controller
@Repository
@Service
@RestController

এগুলি সমস্ত স্টেরিও টাইপ টিকা। এটি আমাদের ক্লাসগুলিকে আইওসি পাত্রে বসন্ত বিন হিসাবে তৈরি করার জন্য কার্যকর,

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