වසන්තයේ p සංයුක්ත, e නිධිය සහ සේවා විවරණ අතර වෙනස කුමක්ද?


2120

හැකි @Component, @Repositoryසහ @Serviceවිවරණයන් ඉදිරිපත් වසන්ත පොදුවේ භාවිතා කළ හෝ ඔවුන් අංකනය උපාංගය ලෙස කටයුතු හැර යම් විශේෂිත පහසුකම් ලබා කරන්නේ?

වෙනත් වචන වලින් කිවහොත්, මට සේවා පංතියක් තිබේ නම් සහ මම විවරණය වෙනස් කරන්නේ @Serviceනම් @Component, එය තවමත් එලෙසම හැසිරෙනු ඇත්ද?

නැතහොත් ව්‍යාඛ්‍යාව පන්තියේ හැසිරීම හා ක්‍රියාකාරිත්වයට ද බලපාන්නේද?


8
මයික්‍රොසොෆ්ට් පසුබිම සහිත සංවර්ධකයෙකු වන මට පැරණි එම්එස් ස්මාර්ට් ක්ලියන්ට්සොෆ්ට්වෙයාර් ෆැක්ටරි රාමුවේ (දැන් බෙදා හරින ලද ඩෙස්ක්ටොප් යෙදුම් සඳහා දිගු කප්පාදු කරන ලද සංකීර්ණ රාමුවක්) සේවාවන්හි අර්ථකථන අර්ථ දැක්වීම සිහිපත් වේ. එම නිර්වචනය ( රිච් නිව්මන් විසින් මනාව ලේඛනගත කර ඇත) සේවා අර්ථ දැක්වෙන්නේ තර්ක රහිතව නැවත භාවිතා කළ හැකි වස්තූන් ලෙසටය, ඊට වඩා තනි තනි විෂය පථයක් සහිතව, ඒවා තර්ක ලෙස සම්මත කරන ලද වෙනත් වස්තූන් මත ව්‍යාපාර තාර්කික මෙහෙයුම් සිදු කිරීම සඳහා භාවිතා කරයි. මම වසන්ත සේවාවන් එකම ආකාරයකින් බැලීමට නැඹුරු වෙමි
ඉවායිලෝ ස්ලාවොව්

3
කමක් නැහැ !! ඔබ වෙනුවෙන් කුමක් කළත් :) වසන්තය ගැන මම සැමවිටම වෛර කළෙමි, ඔවුන් ඔබ වෙනුවෙන් "නීති" නිර්වචනය කිරීමට නිතරම නැඹුරු වන අතර එමඟින් ඔබේ යෙදුමට සුළු වටිනාකමක් පමණක් ලැබේ. වසන්තය එහි විශාල තොගයක් ඇති බව සඳහන් නොකල යුතුය.
ට්‍රයිකෝර්

31
RiTriCore Sprting යනු රාමුවකි, ඔබට "නීති" යන්න අර්ථ දක්වන්න එහි කාර්යය වේ :)
Walfrat

Answers:


1509

සිට වසන්තය Documentation :

මෙම @Repositoryකාරක සභාවකින් නිධිය (ද දත්ත ප්රවේශ වස්තූන් හෝ DAO ලෙස හඳුන්වන) කාර්යභාරය හෝ ඒකාකෘතික ඉටු කරන බව ඕනෑම පන්තිය සඳහා මාකර් වේ. මෙම සලකුණුකරුවාගේ භාවිතයන් අතර ව්‍යතිරේක පරිවර්තනයේ විස්තර කර ඇති පරිදි ව්‍යතිරේකයන් ස්වයංක්‍රීයව පරිවර්තනය වේ .

වසන්තය තව දුරටත් ඒකාකෘතික විවරණයන් ඉදිරිපත් සපයයි: @Component, @Service, සහ @Controller. @Componentඕනෑම වසන්ත-කළමනාකරණය කළ සංරචකයක් සඳහා සාමාන්‍ය ඒකාකෘති වර්ගයකි. @Repository,, @Serviceසහ වඩාත් නිශ්චිත භාවිත අවස්ථා සඳහා @Controllerවිශේෂීකරණයන් වේ @Component(පිළිවෙලින් අඛණ්ඩතාව, සේවා සහ ඉදිරිපත් කිරීමේ ස්ථර වල). ඒ නිසා, ඔබ සමඟ ඔබේ අංගයක් පන්ති annotate හැකි @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
Ew වෙබ් සේවාදායකයට @Controller (හෝ omComponent) එකතු කිරීම අර්ථවත්ද? එය වසන්ත එම්වීසී පාලකයක් නොවේ, නමුත් එය සංකල්පමය වශයෙන් ආසන්නතම තරගයයි. සර්වට් ෆිල්ටර් ගැන කුමක් කිව හැකිද?
රික්

1
"ඔබේ අඛණ්ඩ ස්ථරයේ ස්වයංක්‍රීය ව්‍යතිරේක පරිවර්තනය සඳහා සලකුණු කාරකයක් ලෙස නිධිය දැනටමත් සහාය දක්වයි." මධ්යන්ය?
ජැක්

9
එය යොමු දක්වන්නේ මෙම විවරණයන් AOP සඳහා හොඳ ඉලක්ක වන අතර අනෙක් ව්‍යාඛ්‍යාවලින් ලක්ෂ්‍යයක් තවමත් අර්ථ දක්වා නොමැති අතර අනාගතයේදී ඔවුන් එය කළ හැකිය. අනෙක් අතට, @ ගබඩාව මේ වන විටත් ලක්ෂ්‍යයක් සඳහා ඉලක්කයකි. එම ලක්ෂ්‍යය ව්‍යතිරේක පරිවර්තන සඳහා භාවිතා කරයි, එනම් දැඩි ලෙස සම්බන්ධ වීම වළක්වා ගැනීම සඳහා තාක්‍ෂණික විශේෂිත ව්‍යතිරේක වඩාත් සාමාන්‍ය වසන්තය මත පදනම් වූ ඒවාට පරිවර්තනය කිරීම.
stivlo

3
ivstivlo: මම ඇත්ත වශයෙන්ම 'ඒකාකෘති' යන පදය තේරුම් ගැනීමට උත්සාහ කර ඇත්තෙමි. කරුණාකර මෙම පාරිභාෂිතය තේරුම් ගැනීමට මට උදව් කළ හැකිද? එය බොහෝ සෙයින් උපකාරී වන අතර ඔබට බොහෝම ස්තූතියි
ප්‍රේම්රාජ්

2
enxenoterracide ප්‍රායෝගිකව විශාල වෙනසක් නොමැත. සමග ග්රන්ථ දෙයක් @Service වේ එය ද @Component(මන්ද @Serviceකාරක සභාවකින් තමන් සමග ග්රන්ථ වේ @Component). මා දන්නා පරිදි, වසන්ත රාමුවේ කිසිවක් පැහැදිලිවම යමක් යන කාරණය පැහැදිලිවම භාවිතා නොකරයි @Service, එබැවින් වෙනස සැබවින්ම සංකල්පීය පමණි.
ජෙස්පර්

809

බොහෝ පිළිතුරු වල දැනටමත් මෙම විවරණයන් භාවිතා කරන්නේ කුමක් දැයි සඳහන් කර ඇති හෙයින්, අපි මෙහි අවධානය යොමු කරන්නේ ඒවා අතර සුළු වෙනස්කම් කිහිපයක් පිළිබඳව ය.

පළමුව සමානතාව

නැවත ඉස්මතු කර දැක්විය යුතු පළමු කරුණ නම්, බීන් නිර්වචනය සඳහා ස්කෑන්-ස්වයංක්‍රීයව අනාවරණය කර ගැනීම සහ පරායත්ත එන්නත් කිරීම සම්බන්ධයෙන් මෙම සියලු විවරණ (එනම්, omp සංයුක්ත, erv සේවා, osRopository, ontController) සමාන වේ. අපට තවත් එකක් වෙනුවට එකක් භාවිතා කළ හැකි අතර තවමත් අපේ ගමන යා හැකිය.


On සංයුක්ත, e නිධිය, ontController සහ @ සේවා අතර වෙනස්කම්

On සංයුක්ත

මෙය පොදු අරමුණු ඒකාකෘති විවරණයකි, එයින් පෙන්නුම් කරන්නේ පන්තිය වසන්ත සංරචකයක් බවයි.

@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>


E නිධිය

පංතිය දත්ත ගබඩාවක් නිර්වචනය කරන බව මෙයින් ඇඟවෙයි.

E නිධියෙහි විශේෂත්වය කුමක්ද?

මෙය බව පෙන්වා දෙමින්, අමතරව වින්යාස පදනම් කාරක සභාවකින් , @Repositoryගේ රැකියා උඩ වේදිකාවක් විශේෂිත ව්යතිරේකයන් කිරීමට වන අතර, ඔවුන් වසන්තය ගේ ඒකාබද්ධ පරීක්ෂාවෙන් තොරව හැර එකක් ලෙස නැවත දමන්න. මේ සඳහා, PersistenceExceptionTranslationPostProcessorඅපගේ වසන්තයේ යෙදුම් සන්දර්භය තුළ එකතු කිරීමට අවශ්‍ය බව අපට ලබා දී ඇත:

<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>

මෙම බෝංචි පෝස්ට් ප්‍රොසෙසරය විවරණය කර ඇති ඕනෑම බෝංචි සඳහා උපදේශකයෙකු එක් කරන අතර @Repositoryඑමඟින් ඕනෑම වේදිකා විශේෂිත ව්‍යතිරේකයක් අල්ලාගෙන නැවත වසන්තයේ අනවසර දත්ත ප්‍රවේශ ව්‍යතිරේකයක් ලෙස විසි කරයි.


Ont පාලකය

මෙම @Controllerවිශේෂ පන්ති පාලක භූමිකාව සේවය කරන කාරක සභාවකින් බවයි. මෙම @Controllerකාරක සභාවකින් තම භූමිකාව දුරකින් විවරණ සහිත පන්තිය සඳහා ඒකාකෘතික ලෙස ක්රියා.

OntController හි විශේෂත්වය කුමක්ද?

අපට මෙම විවරණය වෙනත් පෙනුමක් @Serviceහෝ වෙනත් ඒවා සමඟ මාරු කළ නොහැක @Repository. පිටත්කරුවා විසින් විවරණය කරන ලද පංති පරිලෝකනය කරන අතර ඒවා තුළ විවරණයන් @Controllerසමඟ @RequestMappingවිවරණය කළ ක්‍රම හඳුනා ගනී . අපි භාවිතා කළ හැකි @RequestMappingසිය පන්ති ග්රන්ථ කරන අය ක්රම පමණක් / මත @Controllerසහ එය නොවේ සමග වැඩ @Component, @Service, @Repositoryආදිය ...

සටහන: පන්ති දැනටමත් බෝංචි ඕනෑම විකල්ප ක්රම මඟින්, වැනි හරහා ලියාපදිංචි වී තිබේ නම්, @Beanහෝ හරහා @Component, @Serviceආදිය ... විවරණයන් ඉදිරිපත්, එවිට @RequestMappingපන්ති ද සමග ග්රන්ථ නම් තෝරා ගත හැකි @RequestMappingකාරක සභාවකින්. නමුත් එය වෙනස් අවස්ථාවක්.


@සේවා

@Service බෝංචි ව්‍යාපාර තාර්කිකත්වය සහ ඇමතුම් ක්‍රම නිධිය ස්ථරයේ රඳවා තබා ගනී.

Erv සේවාවේ විශේෂත්වය කුමක්ද?

එය ව්‍යාපාර තර්කනය දරණ බව දැක්වීමට භාවිතා කර ඇති කාරණය හැරුණු විට, මෙම විවරණයේ තවත් කැපී පෙනෙන දෙයක් නොමැත; නමුත් කවුද දන්නේ, වසන්තය අනාගතයේදී තවත් සුවිශේෂී යමක් එකතු කරයි.


වෙන මොනවද?

අනාගතයේ දී, ඉහත සමාන වසන්තය විශේෂ අංගයන් එකතු විය හැක @Service, @Controllerහා @Repositoryඔවුන්ගේ අතු බැඳීම සම්මුති මත පදනම්. එබැවින් සමුළුවට ගරු කිරීම සහ එය ස්ථරවලට අනුකූලව භාවිතා කිරීම සැමවිටම හොඳ අදහසකි.


JPA අනාවරණය වුවහොත් 'PersistenceExceptionTranslationPostProcessor' ස්වයංක්‍රීයව ලියාපදිංචි වේ.
ඔල්ගා

24
අපූරු පැහැදිලි කිරීම. ඔබ මගේ වැරදි වැටහීම් ගොඩක් ඉවත් කර ඇත. අප විසින් අපගේ සියලු ව්‍යාපෘති පහළ සිට ඉහළට ගොඩනගා ඇති විශ්ව විද්‍යාලයකින් පැමිණීම, ඔබ පැහැදිලිවම වැඩසටහන ඔබ හා සම්බන්ධ කර නොතිබුණද වසන්ත යෙදුම් ක්‍රියාත්මක වූයේ මන්දැයි තේරුම් ගැනීමට මට අපහසු විය. ව්‍යාඛ්‍යාව දැන් බොහෝ අර්ථවත් කරයි, ස්තූතියි!
NodziGames

එසේ නම්, ශිශිරතාරක (ස්ථීර ස්ථරය) සඳහා සේවා විවරණය යන්නෙන් අදහස් කරන්නේ කුමක්ද? ස්ථර ස්ථරයේ ගතිකත්වය සඳහා මෙම ස්තරය ඉතා වැදගත් වේ. ජේපීඒ වෙත එය බලපාන්නේ කෙසේදැයි යමෙකු ගැඹුරින් දන්නේ නම් එය ඉතා ප්‍රයෝජනවත් වනු ඇත)))
මූසා

1
ව්‍යාඛ්‍යාව පිළිබඳ කුඩා වැරදි තොරතුරු තිබේ @Controller. පංතිය විවරණය කර @RequestMappingමෙම පන්තියේ බෝංචි කිසියම් ආකාරයකින් නිර්මාණය කර ඇත්නම් එය අවශ්‍ය නොවේ . @Controller OR සමඟ විවරණය කර ඇති ඕනෑම බෝංචි @RequestMappingවසන්ත MVC හි ඉල්ලීම් සිතියම්කරණයට සහභාගී වේ. නිදසුනක් ලෙස ක්‍රමලේඛ පාලකයන් නිර්මාණය කිරීම සඳහා මෙය ප්‍රයෝජනවත් වේ (උදා: @Beanක්‍රම භාවිතා කිරීම) සහ ඒ සමඟම වසන්තය ඇසුරුම් පරිලෝකනය මඟින් ඒවා නිර්මාණය කිරීමට උත්සාහ කිරීම වැළැක්වීම සඳහා (පැකේජය ස්කෑන් කිරීමෙන් බැහැර කළ නොහැකි නම්).
රුස්ලාන් ස්ටෙල්මාචෙන්කෝ

1
මෙය ඉහළම ඡන්දය දුන් පිළිතුර විය යුතුය - සියලු ප්‍රශ්න වලට පිළිතුරු සපයන අතර තරමක් ගැඹුරට යයි. පළමු OP ප්‍රශ්නය - තාක්ෂණික වෙනස්කම් ගැන @stivlo වැඩි විස්තර කර නැත.
kiedysktos

431

ඒවා බොහෝ දුරට එක හා සමානයි - ඒ සියල්ලම අදහස් කරන්නේ පන්තිය වසන්ත බෝංචි බවයි. @Service, @Repositoryසහ @Controllerවිශේෂිත @Components වේ. ඔවුන් සමඟ නිශ්චිත ක්‍රියා කිරීමට ඔබට තෝරා ගත හැකිය. උදාහරණයක් වශයෙන්:

  • @Controller බෝංචි වසන්ත-එම්වීසී භාවිතා කරයි
  • @Repository අඛණ්ඩ ව්‍යතිරේක පරිවර්තනය සඳහා බෝංචි සුදුසුකම් ලබයි

තවත් දෙයක් නම්, ඔබ විවිධ ස්ථර වලට අර්ථ නිරූපණය කරයි.

ඉදිරිපත් කරන එක් දෙයක් @Componentනම්, ඔබට එය සමඟ වෙනත් විවරණයන් විවරණය කළ හැකි අතර පසුව ඒවා ඒ ආකාරයෙන්ම භාවිතා කරන්න @Service.

උදාහරණයක් ලෙස මෑතකදී මම:

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

එබැවින් විවරණය කර ඇති සියලුම පංති @ScheduledJobවසන්ත බෝංචි වන අතර ඊට අමතරව ක්වාර්ට්ස් රැකියා ලෙස ලියාපදිංචි කර ඇත. ඔබට නිශ්චිත විවරණය හසුරුවන කේතයක් සැපයිය යුතුය.


1
On සංයුක්ත යනු වසන්ත බෝංචි පමණක් වන අතර ඒ සඳහා වෙනත් අරමුණක් තිබේද?
කපිල් දාස්

22
වසන්ත බහාලුම් මගින් සංයුක්ත බෝංචි ස්වයංක්‍රීයව හඳුනාගත හැකිය. වින්‍යාස ගොනුවේ බෝංචි නිර්වචනය කිරීමට ඔබට අවශ්‍ය නැත, එය ධාවන වේලාවේදී වසන්තය විසින් ස්වයංක්‍රීයව අනාවරණය වේ.
ආකාෂ් 5288

1
මම සාමාන්‍ය @ සංයුක්තයට බෙහෙවින් කැමතියි ... විශේෂයෙන් @Scope (proxyMode = ScopedProxyMode.//MODE) සමඟ සංයුක්තව
එඩී බී

370

Comp සංයුතිය සමාන වේ

<bean>

Erv සේවා, ontController, @Repository = @ p ​​සංයුක්ත + තවත් විශේෂ ක්‍රියාකාරිත්වයන්}

ඒ කියන්නේ සේවාව, පාලකය සහ නිධිය ක්‍රියාකාරීව එක හා සමානයි.

ඔබේ යෙදුමේ "ස්ථර" වෙන් කිරීම සඳහා විවරණ තුන භාවිතා කරයි ,

  • පාලකයෝ යවන්නේ යැවීම, යොමු කිරීම, ඇමතුම් සේවා ක්‍රම වැනි දේ ය.
  • සේවා දරණ ව්‍යාපාර තර්කනය, ගණනය කිරීම් ආදිය.
  • නිධිය යනු DAOs (දත්ත ප්‍රවේශ වස්තු), ඒවා දත්ත ගබඩාවට කෙලින්ම ප්‍රවේශ වේ.

ඒවා වෙන් කරන්නේ ඇයිදැයි දැන් ඔබට ඇසිය හැකිය: (ඔබ සිතන්නේ AOP-Aspect Oriented Programming

DAO ස්තරයේ ක්‍රියාකාරිත්වය පමණක් අධීක්ෂණය කිරීමට ඔබට අවශ්‍ය යැයි කියමු. ඔබේ DAO හි සෑම ක්‍රමයක්ම ක්‍රියාත්මක කිරීමට පෙර සහ පසුව යම් යම් ලොග් වීමක් සිදුකරන Aspect (A class) පන්තියක් ඔබ ලියනු ඇත, ඔබට විශේෂිත ස්ථර තුනක් ඇති නමුත් මිශ්‍ර නොවූ බැවින් ඔබට AOP භාවිතා කළ හැකිය.

එබැවින් ඔබට DAO "අවට", "පෙර" හෝ "පසු" DAO ක්‍රම ලොග් කිරීම කළ හැකිය. ඔබට එය කළ හැක්කේ ඔබට මුලින්ම DAO එකක් තිබූ බැවිනි. ඔබ දැන් අත්කර ගෙන ඇත්තේ උත්සුකයන් හෝ කාර්යයන් වෙන් කිරීමයි.

සිතන්න, එක් විවරණයක් පමණක් තිබේ නම් - පාලකය, එවිට මෙම සංරචකයට යැවීම, ව්‍යාපාර තර්කනය සහ දත්ත සමුදායට ප්‍රවේශ වීම යන සියල්ල මිශ්‍ර, අපිරිසිදු කේතයක් ඇත!

ඉහත සඳහන් කර ඇත්තේ ඉතා සුලභ සිදුවීමක් වන අතර, විවරණ තුනක් භාවිතා කරන්නේ ඇයිද යන්න පිළිබඳ තවත් බොහෝ භාවිත අවස්ථා තිබේ.


7
මට මූලික ප්‍රශ්නයක් තිබේ - විවරණයන් වසන්ත යාන්ත්‍රණය විසින් භාවිතා කරනවාද නැතහොත් ඒවා ක්‍රමලේඛකයාට එම කේත කොටස් කරන්නේ කුමක්දැයි මතක තබා ගැනීම සඳහාද?
user107986

27
10 user107986 ඒවා ප්‍රධාන වශයෙන් ක්‍රමලේඛකයාට යෙදුමේ ස්ථර මතක තබා ගැනීමයි. කෙසේ වෙතත් @Respositoryස්වයංක්‍රීය ව්‍යතිරේක පරිවර්තන අංගයක් ද ඇත. ව්‍යතිරේකයක් සිදු වූ විට මෙන් @Repositoryසාමාන්‍යයෙන් එම ව්‍යතිරේකය සඳහා හසුරුවන්නෙකු සිටින අතර DAO පන්තියේ උත්සාහක ඇල්ලීම් එකතු කිරීමේ අවශ්‍යතාවයක් නොමැත. එය PeristenceExceptionTranslationPostProcessor
Oliver

කරුණාකර නියැදි කේතයක් ලිවිය හැකිද? සියලු "e නිධිය" පන්තිය සඳහා ඒකාබද්ධ ලකුණු ලියන්නේ කෙසේද. එක්කෝ අපි ප්‍රකාශන භාවිතා කරන්නෙමු, බෝංචි නාමය භාවිතා කරන්නෙමු, නමුත් මෙම උපදෙස් සියලු "e රිපොසිටරි" පංති වලට අදාළ වේ. මම මෙහි නියැදිය ලබා ගැනීමට උත්සාහ කළ නමුත් සොයා ගැනීමට නොහැකි විය.ඔබගේ උදව් සැබවින්ම අගය කරනු ලැබේ.
මොනි

එසේම, ව්‍යාඛ්‍යාන සියල්ලම දැනට එකම ක්‍රියාකාරී ලෙස ක්‍රියාත්මක වන අතර, දී ඇති ගුණාංගයක් සඳහා නිශ්චිත ක්‍රියාකාරීත්වයක් අනාගතයේදී එකතු කිරීමට ඉඩ ඇත.
Cod3Citrus

224

වසන්තයේ @Componentදී @Service, @Controllerසහ @Repositoryභාවිතා කරනු ලබන ඒකාකෘති විවරණ:

@Controller:ඉදිරිපත් කිරීමේ පිටුවෙන් ඔබගේ ඉල්ලීම් සිතියම්ගත කිරීම සිදු කළ විට, එනම් ඉදිරිපත් කිරීමේ ස්තරය එය කෙලින්ම @Controllerපන්තියට යන වෙනත් ගොනුවකට නොයනු ඇත @RequestMapping.

@Service: සියලුම ව්‍යාපාරික තර්කනයන් මෙහි ඇත, එනම් දත්ත ආශ්‍රිත ගණනය කිරීම් සහ සියල්ලම. මෙම ව්‍යාපාර ස්ථරයේ විවරණය අපගේ පරිශීලකයා නොනැසී පවතින ක්‍රමයට සෘජුවම නොකියන බැවින් මෙම ව්‍යාඛ්‍යාව භාවිතා කරමින් මෙම ක්‍රමය අමතනු ඇත. එය පරිශීලක ඉල්ලීම අනුව e නිධිය ඉල්ලනු ඇත

@Repository: මෙය දත්ත සමුදායෙන් දත්ත ලබා ගැනීම සඳහා භාවිතා කරන යෙදුමේ ස්ථීර ස්ථරය (දත්ත ප්‍රවේශ ස්ථරය) වේ. එනම් දත්ත සමුදායට අදාළ සියළු මෙහෙයුම් සිදු කරනු ලබන්නේ නිධිය විසිනි.

@Component - ඔබේ අනෙකුත් සංරචක (නිදසුනක් ලෙස REST සම්පත් පන්ති) සංරචක ඒකාකෘති ආකාරයෙන් විවරණය කරන්න.

විවරණය කළ පන්තියක් “ සංරචකයක් ” බව දක්වයි. එවැනි පංති විවරණ පාදක වින්‍යාසය සහ පන්ති මාර්ග පරිලෝකනය භාවිතා කරන විට ස්වයංක්‍රීයව හඳුනා ගැනීම සඳහා අපේක්ෂකයින් ලෙස සැලකේ.

අනෙකුත් පංති මට්ටමේ විවරණයන් සංරචකයක් හඳුනා ගැනීමක් ලෙස සැලකිය හැකිය, සාමාන්‍යයෙන් විශේෂ ආකාරයේ අංගයකි: උදා: os නිධිය විවරණය හෝ ඇස්පෙක්ට් ජේ හි ec විස්තාරණ විවරණය.

රූප විස්තරය මෙහි ඇතුළත් කරන්න


24
මෙම පිළිතුරු සියල්ලම හොඳයි, නමුත් මට බොහෝ දෙනෙකුට අවශ්‍ය වන්නේ “ව්‍යාපාර තර්කනය” වැනි සාමාන්‍ය විස්තරයකට වඩා අපගේ හිසෙහි වඩාත් සංක්ෂිප්තව තැබිය හැකි සේවා පිරිනැමීම් වැනි අංගයන්ගේ කේත උදාහරණ කිහිපයකි. මෙම වස්තුව. එසේ
නොමැතිනම්

2
නෑ සියලු ව්යාපාර තර්කනය සේවාවන් වෙත යා යුතු! සේවාවන්, ඩීඩීඩී අනුව, අඩංගු විය යුත්තේ එක් ආයතනයකට වඩා බලපාන වසම් තර්කනය පමණි. පිළිතුර බලන්න stackoverflow.com/a/41358034/238134
deamon

@deamon ඔව්, නමුත් එය රඳා පවතින්නේ සංවර්ධකයින්ගේ ප්‍රවේශය මතය
හර්ෂල් පටිල්

4
Ar හර්ෂල් පැටිල් ඔබට ඇත්ත වශයෙන්ම සේවාවන්හි සියලුම ව්‍යාපාරික තර්කනයන් සමඟ යෙදුමක් ලිවිය හැකිය, නමුත් එය රක්තහීන වසම් ආකෘතියකට තුඩු දෙනු ඇති අතර එමඟින් ආයතනවල සීමාවන් සහ අනුකූලතාව බලාත්මක කිරීම අනවශ්‍ය වනු ඇත.
ඩීමන්

1
ඇත්ත වශයෙන්ම එය සංවර්ධකයාගේ ප්‍රවේශය මත රඳා පවතී. හැම දෙයක්ම කරනවා. ඔබ ගැටලුවට වැරදියට ප්‍රවේශ වන්නේ නම්, එනම් ව්‍යුහයක් නොමැතිව ඔබට අවශ්‍ය ඕනෑම දෙයක් ලියා එය “ඔබේ ප්‍රවේශය” යැයි පවසන්න - එය නිවැරදි වුවද එය නිවැරදි නොවේ. “හරි” සහ “වැරදි”, ඇත්ත වශයෙන්ම, SOLID සහ වෙනත් මූලධර්ම වැනි හොඳ මෘදුකාංග සංවර්ධන භාවිතයන් විස්තර කිරීම සඳහා වචන ලෙස භාවිතා කිරීම, නරක මෘදුකාංග භාවිතයන්ට එදිරිව “මට දැන් මේ වගේ අවශ්‍යයි” සහ ඒ හා සමාන ය.
මිලොස්මන්

71

වසන්තය 2.5 තවදුරටත් ඒකාකෘති විවරණයන් හඳුන්වා දෙයි: on සංයුක්ත, erv සේවා සහ on පාලකය. වසන්තය කළමනාකරණය කරන ඕනෑම සංරචකයක් සඳහා පොදු ඒකාකෘති ආකාරයක් ලෙස සංයුක්ත සේවය කරයි; ෙකෙසේෙවතත්, e ෙදපාර්තෙම්න්තු, erv ෙසේවා සහ on පාලක වඩාත් නිශ්චිත භාවිත අවස්ථා සඳහා on සංයුක්තෙය් විෙශේෂීකරණයන් ෙලස සේවය කරයි (උදා: අඛණ්ඩව, ෙසේවා සහ ඉදිරිපත් කිරීෙම් ස්ථරවල). මෙයින් අදහස් කරන්නේ ඔබට ඔබේ සංරචක පංති @ සංයුක්තය සමඟ විවරණය කළ හැකි නමුත් ඒවා වෙනුවට @ ගබඩාව, ers සේවා හෝ on පාලකය සමඟ විවරණය කිරීමෙන් ඔබේ පන්ති මෙවලම් මගින් සැකසීමට හෝ අංශ සමඟ සම්බන්ධ වීමට වඩාත් සුදුසු වේ. නිදසුනක් ලෙස, මෙම ඒකාකෘති විවරණයන් ලක්ෂ්‍ය කට් සඳහා පරිපූර්ණ ඉලක්ක කරයි. ඇත්ත වශයෙන්ම, වසන්ත රාමුවේ අනාගත නිකුතුවලදී @ ගබඩාව, erv සේවා සහ on පාලකය අමතර අර්ථකථන රැගෙන යා හැකිය. මේ අනුව, ඔබේ සේවා ස්ථරය සඳහා @ සංයුක්ත හෝ service සේවා භාවිතා කිරීම අතර ඔබ තීරණයක් ගන්නේ නම්, erv සේවාව පැහැදිලිවම වඩා හොඳ තේරීම වේ. ඒ හා සමානව, ඉහත සඳහන් කළ පරිදි, ඔබේ ස්ථරයේ ස්වයංක්‍රීය ව්‍යතිරේක පරිවර්තනය සඳහා සලකුණු කාරකයක් ලෙස e නිධිය දැනටමත් සහාය දක්වයි.

@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.

යොමුව: - වසන්ත ප්‍රලේඛනය - ජාවා භාවිතා කරමින් පන්ති මාර්ග පරිලෝකනය, කළමනාකරණ සංරචක සහ ලිවීමේ වින්‍යාස


49

තාක්ෂණික @Controllerවශයෙන් @Service, @Repositoryසියල්ලම එක හා සමානයි. ඒවා සියල්ලම විහිදේ@Component .

වසන්ත ප්‍රභව කේතයෙන්:

විවරණය කළ පන්තියක් “සංරචකයක්” බව දක්වයි. එවැනි පංති විවරණ පාදක වින්‍යාසය සහ පන්ති මාර්ග පරිලෝකනය භාවිතා කරන විට ස්වයංක්‍රීයව හඳුනා ගැනීම සඳහා අපේක්ෂකයින් ලෙස සැලකේ.

අපි සෘජුවම භාවිතා කළ හැකිය @Componentඅපි භාවිතා කරන අතර, එක් එක් හා සෑම බෝංචි සඳහා නොව, විශාල අයදුම්පත් වඩා හොඳ අවබෝධයක් හා maintainability සඳහා @Controller, @Service,@Repository .

එක් එක් විවරණයේ අරමුණ:

  1. @Controller-> මේ සමඟ විවරණය කර ඇති පන්ති, සේවාදායකයාගේ පැත්තෙන් ඉල්ලීමක් ලැබීමට අදහස් කරයි. පළමු ඉල්ලීම ඩිස්පචර් සර්වට්ලට් වෙත පැමිණේ, එය විවරණයේ වටිනාකම භාවිතා කරමින් එම ඉල්ලීම විශේෂිත පාලක වෙත යවයි @RequestMapping.
  2. @Service-> මේ සමඟ විවරණය කර ඇති පන්ති, සේවාදායකයාගෙන් අපට ලැබෙන හෝ දත්ත සමුදායෙන් ලබා ගත හැකි දත්ත හැසිරවීමට අදහස් කරයි. දත්ත සමඟ සියලු හැසිරවීම් මෙම ස්තරය තුළ සිදු කළ යුතුය.
  3. @Repository-> මේ සමඟ විවරණය කර ඇති පන්ති, දත්ත සමුදාය සමඟ සම්බන්ධ වීමට අදහස් කරයි. එය DAO (Data Access Object) ස්තරය ලෙස ද සැලකිය හැකිය. මෙම ස්තරය CRUD (නිර්මාණය, ලබා ගැනීම, යාවත්කාලීන කිරීම, මකා දැමීම) මෙහෙයුම් වලට පමණක් සීමා කළ යුතුය. කිසියම් හැසිරවීමක් අවශ්‍ය නම්, දත්ත නැවත සේවා ස්ථරයට යැවිය යුතුය.

අපි ඔවුන්ගේ ස්ථානය (භාවිතය හුවමාරුව නම් @Repositoryවෙනුවට @Controller), අපගේ අයදුම් දඩ වැඩ කරනු ඇත.

වෙනස් තුනක් භාවිතා කිරීමේ ප්‍රධාන අරමුණ වන්නේ @annotationsව්‍යවසාය යෙදුමට වඩා හොඳ මොඩියුලරිටි ලබා දීමයි.


2
අන්තර් හුවමාරු ස්ථාන ආදේශ කිරීමෙන් ඔබ අදහස් කරන්නේ කුමක්ද? controller and repository
අෂිෂ් කැම්බල්

46

දත්ත සමුදා සම්බන්ධතා දෘෂ්ටි කෝණයෙන් භාවිතය @Serviceසහ @Repositoryවිවරණයන් වැදගත් වේ.

  1. @Serviceඔබගේ සියලුම වෙබ් සේවා වර්ගයේ ඩීබී සම්බන්ධතා සඳහා භාවිතා කරන්න
  2. @Repositoryඔබ ගබඩා කර ඇති සියලුම ප්‍රොක් ඩීබී සම්බන්ධතා සඳහා භාවිතා කරන්න

ඔබ නිසි විවරණ භාවිතා නොකරන්නේ නම්, ආපසු හැරවීමේ ගනුදෙනු මගින් ඔබ විසින් සිදුකරන ලද ව්‍යතිරේකයන්ට මුහුණ දිය හැකිය. ජේඩීබීසී ගනුදෙනු ආපසු හැරවීමට අදාළ ආතති පැටවීමේ පරීක්ෂණයේදී ඔබ ව්‍යතිරේකයන් දකිනු ඇත.


DB මෙහෙයුම් වෙනුවට RestAPI ඇමතුම් සඳහා @ ගබඩාව භාවිතා කළ හැකිද?
නයීම්

Ay නයීම් තාක්‍ෂණිකව ඔබට පාලකයන් ලෙස සහ සේවා ලෙස සේවා ලෙස විවරණය කළ හැකිය, යැපුම් එන්නත් කිරීම එකම ආකාරයකින් ක්‍රියාත්මක වේ. නමුත් ඔබ කවදා හෝ එසේ කරන්නේ ඇයි? එය දත්ත සමුදායන් සමඟ ක්‍රියා නොකරන්නේ නම් - එය ගබඩාවක් නොවන අතර එය @Repositoryස්ථිරවම ස්ථර සමඟ වැඩ කිරීම සඳහා නිර්මාණය කර ඇත. ඔබ විවේක api සමඟ වැඩ කරන්නේ නම් - ඔබ වැඩ කරන්නේ DAO සමඟ නොව DTO සමඟය.
බෙන්

28

E රිපෝසිටරි @ සේවා සහ on පාලකය යනු කොම්පොනන්ට් හි විශේෂීකරණය ලෙස සේවය කරනුයේ එම පදනම මත වඩාත් නිශ්චිත භාවිතය සඳහා ඔබට @ සේවාව on සංයුක්තයට ආදේශ කළ හැකි නමුත් මේ අවස්ථාවේ දී ඔබ විශේෂීකරණය ලිහිල් කරයි.

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

මෙම සියලු විවරණයන් ස්ටීරියෝ වර්ගයේ විවරණ වර්ගයකි, මෙම විවරණ තුන අතර වෙනස වේ

  • අපි @ සංයුක්තය එකතු කළහොත් එය පන්තියේ භූමිකාව සංරචක පන්තියක් යැයි කියනු ඇත, එයින් අදහස් කරන්නේ එය යම් තර්කනයකින් සමන්විත පංතියක් බවයි, නමුත් එය නිශ්චිතවම ව්‍යාපාරයක් හෝ අඛණ්ඩතාවයක් හෝ පාලක තර්කනයක් අඩංගු පන්තියක් දැයි නොකියයි, එබැවින් අපි භාවිතා නොකරමු කෙලින්ම මෙම on සංයුක්ත විවරණය
  • අපි @ සේවා විවරණය එකතු කළහොත් එයින් කියැවෙන්නේ ව්‍යාපාර තර්කනයෙන් සමන්විත පන්තියේ භූමිකාවක් බවයි
  • අපි පංතියට ඉහළින් @ නිධිය එකතු කළහොත් එයින් කියැවෙන්නේ ස්ථීර තර්කනයකින් සමන්විත පන්තියක් බවයි
  • මෙහි @Component යනු @ සේවා, os නිධිය සහ ont පාලක විවරණ සඳහා මූලික විවරණයකි

උදාහරණයක් වශයෙන්

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පන්ති උඩ පැවැත්ම යන්නේ කාරක සභාවකින්

24

වසන්ත වාහන අංගයක් ස්කෑන් විවරණයන් ඉදිරිපත් විවිධ වර්ග හතරක් සපයයි, ඔවුන් @Component, @Service, @Repositoryහා @Controller. තාක්ෂණික වශයෙන්, ඒවා අතර කිසිදු වෙනසක් නැත, නමුත් සෑම ස්වයංක්‍රීය සංරචක ස්කෑන් විවරණයක්ම විශේෂ කාර්යයක් සඳහා සහ නිර්වචනය කළ ස්තරය තුළ භාවිතා කළ යුතුය.

@Component: එය මූලික ස්වයංක්‍රීය සංරචක ස්කෑන් විවරණයකි, එයින් ඇඟවෙන්නේ විවරණය කළ පන්තිය ස්වයංක්‍රීය ස්කෑන් අංගයක් බවයි.

@Controller: විවරණ පන්තියෙන් පෙන්නුම් කරන්නේ එය පාලක අංගයක් වන අතර එය ප්‍රධාන වශයෙන් ඉදිරිපත් කිරීමේ ස්තරයේ භාවිතා වන බවයි.

@Service: එය පෙන්නුම් කරන්නේ විවරණය කරන ලද පන්තිය ව්‍යාපාරික ස්ථරයේ සේවා අංගයක් බවයි.

@Repository: ස්ථීර ස්ථරය තුළ ඔබ මෙම විවරණය භාවිතා කළ යුතුය, මෙය දත්ත සමුදා ගබඩාවක් ලෙස ක්‍රියා කරයි.

යමෙකු @Componentතම පන්තිය විවරණය කරන අතරම වඩාත් විශේෂිත ආකාරයක් තෝරා ගත යුතු අතර මෙම විවරණයේ ඉදිරියට යන නිශ්චිත හැසිරීම් අඩංගු විය හැකිය.


20

ජාවා ප්‍රමිතියට අනුව අපට මෙය පිළිතුරු දිය හැකිය

සඳහන් JSR-330, දැන් වසන්ත සහයෝගය ද, ඔබ භාවිතා කළ හැක්කේ @Namedතියලා නිර්වචනය කිරීමට (කෙසේ වෙතත් @Named=@Component). මෙම සම්මත අනුව ඒ නිසා, (වගේ ඒකාකෘතික නිර්වචනය කිරීමට කිසිදු ප්රයෝජනයක් නොවන බව පෙනෙන්නට @Repository, @Service, @Controllerකාණ්ඩ බෝංචි කිරීමට).

නමුත් වසන්ත පරිශීලකයා මෙම විවිධ විවරණයන් විශේෂිත භාවිතය සඳහා වෙනස් ලෙස දක්වයි, උදාහරණයක් ලෙස:

  1. දක්ෂයින් සඳහා වඩා හොඳ කාණ්ඩයක් අර්ථ දැක්වීමට සංවර්ධකයින්ට උදව් කරන්න. මෙම වර්ගීකරණය සමහර අවස්ථාවලදී ප්‍රයෝජනවත් විය හැකිය. (උදාහරණයක් ලෙස ඔබ භාවිතා කරන විට aspect-oriented, මේවා සඳහා හොඳ අපේක්ෂකයෙකු විය හැකිය pointcuts)
  2. @Repository ව්‍යාඛ්‍යාව මඟින් ඔබේ බෝංචි වලට යම් ක්‍රියාකාරීත්වයක් එක් කරනු ඇත (ඔබේ බෝංචි ස්ථර ස්ථරයට ස්වයංක්‍රීය ව්‍යතිරේක පරිවර්තනයක්).
  3. ඔබ වසන්ත එම්වීසී භාවිතා කරන්නේ නම්, @RequestMappingඑකතු කළ හැක්කේ විවරණය කර ඇති පන්තිවලට පමණි @Controller.

ඔබගේ 3 වන කරුණ සම්බන්ධයෙන්. එය සත්‍යයක් නොවේ. සේවා පන්තිය යටතේ ඇති ක්‍රමවේදයන්ට පවා මට @RequestMapping විවරණ එකතු කළ හැකිය (මම අදහස් කරන්නේ @ සේවා සමඟ විවරණය කළ පන්ති).
රාහුල් ගුප්තා

19

Comp සංයුතිය සමඟ අනෙකුත් සංරචක විවරණය කරන්න, උදාහරණයක් ලෙස REST සම්පත් පන්ති.

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

වසන්තය යනු ඕනෑම වසන්ත කළමනාකරණය කළ සංරචකයක් සඳහා වූ සාමාන්‍ය ඒකාකෘති වර්ගයකි.

On පාලක, erv සේවා සහ os නිධිය යනු විශේෂිත භාවිත අවස්ථා සඳහා on සංයුක්තයේ විශේෂීකරණයයි.

වසන්තයේ සං on ටකය

"සංරචක විශේෂීකරණය"


19

එහි අතර වෙනසක් නැහැ @Component, @Service, @Controller, @Repository. @Componentයනු අපගේ එම්වීසී හි සං component ටකය නිරූපණය කිරීම සඳහා වූ සාමාන්‍ය විවරණයයි. නමුත් අපගේ MVC යෙදුමේ සේවා ස්ථර සංරචක, අඛණ්ඩ ස්ථර සංරචක සහ ඉදිරිපත් කිරීමේ ස්ථර සංරචක වැනි සංරචක කිහිපයක් ඇත. එබැවින් ඒවා වෙන්කර හඳුනා ගැනීම සඳහා වසන්ත ජනතාව අනෙක් විවරණ තුන ද ලබා දී ඇත.

  • අඛණ්ඩ ස්ථර සංරචක නිරූපණය කිරීම සඳහා: @Repository
  • සේවා ස්ථර සංරචක නියෝජනය කිරීමට: @Service
  • ඉදිරිපත් කිරීමේ ස්ථර සංරචක නියෝජනය කිරීමට: @Controller
  • නැතිනම් ඔබට ඒ @Componentසියල්ල සඳහා භාවිතා කළ හැකිය .

17

අපි ont සංයුක්ත හෝ e නිධිය හෝ සේවා සේවය හුවමාරු කළත්

එය එක හා සමානව හැසිරෙනු ඇත, නමුත් එක් අංගයක් වන්නේ අප සංරචකය හෝ @ සේවාව භාවිතා කරන්නේ නම් ගබඩාව වෙනුවට DAO හා සම්බන්ධ නිශ්චිත ව්‍යතිරේකයක් අල්ලා ගැනීමට ඔවුන්ට නොහැකි වනු ඇත.


16

On සංයුක්ත : ඔබ පන්තියක් විවරණය කරයි @Component, එය ශිශිරත්වයට පවසන්නේ එය බෝංචි බවයි.

E නිධිය : ඔබ පන්තියක් විවරණය කරයි @Repository, එය ශිශිරතාරකයට පවසන්නේ එය DAO පන්තියක් බවත් එය DAO පන්තිය ලෙස සලකන බවත්ය. එයින් කියවෙන්නේ පරීක්ෂා නොකළ ව්‍යතිරේකයන් (DAO ක්‍රම වලින් විසි කිරීම) වසන්තයට පරිවර්තනය කිරීමට සුදුසුකම් ලබා දෙන DataAccessExceptionබවයි.

Erv සේවා : මෙය ශිශිරතාරකයට කියනුයේ එය ඔබට සේවා පන්තියක් වන අතර @Transactionalසේවා ස්ථර විවරණයන් වන බැවින් ශිශිරතාරකය එය සේවා අංගයක් ලෙස සලකයි.

ප්ලස් @Serviceයනු අත්තිකාරම් වේ @Component. බෝංචි පන්තියේ නම යැයි උපකල්පනය කරන්න CustomerService, ඔබ XML බෝංචි වින්‍යාස කිරීමේ ක්‍රමයක් තෝරා නොගත් නිසා ඔබ බෝංචි @Componentලෙස එය ඇඟවුම් කළේ බෝංචි ලෙසය. එබැවින් බෝංචි වස්තුව ලබා ගැනීමේදී CustomerService cust = (CustomerService)context.getBean("customerService");පෙරනිමියෙන්, ස්ප්‍රිං විසින් සංරචකයේ පළමු අක්‍ෂරය - 'පාරිභෝගික සේවය' සිට 'පාරිභෝගික සේවය' දක්වා අඩු කරයි. තවද ඔබට 'පාරිභෝගික සේවා' යන නම සමඟ මෙම සංරචකය ලබා ගත හැකිය. නමුත් ඔබ @Serviceබෝංචි පන්තිය සඳහා ව්‍යාඛ්‍යාව භාවිතා කරන්නේ නම් ඔබට නිශ්චිත බෝංචි නාමයක් ලබා දිය හැකිය

@Service("AAA")
public class CustomerService{

ඔබට බෝංචි වස්තුව ලබා ගත හැකිය

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

15

4 වන වසන්තයේ, නවතම අනුවාදය:

@ නිධිය විවරණය යනු නිධියක භූමිකාව හෝ ඒකාකෘති (දත්ත ප්‍රවේශ වස්තුව හෝ DAO ලෙසද හැඳින්වේ) ඉටු කරන ඕනෑම පන්තියකට සලකුණු කිරීමකි. මෙම සලකුණුකරුවාගේ භාවිතයන් අතර 20.2.2, “ව්‍යතිරේක පරිවර්තනය” හි විස්තර කර ඇති පරිදි ව්‍යතිරේකයන් ස්වයංක්‍රීයව පරිවර්තනය කිරීම ද වේ.

වසන්තය තවදුරටත් ඒකාකෘති විවරණයන් සපයයි: on සංයුක්ත, erv සේවා, සහ on පාලකය. වසන්තය කළමනාකරණය කරන ඕනෑම අංගයක් සඳහා පොදු ඒකාකෘති වර්ගයකි. E නිධිය, erv සේවා සහ on පාලකය යනු වඩාත් විශේෂිත භාවිත අවස්ථා සඳහා on සංයුක්තයේ විශේෂීකරණයන් වේ, නිදසුනක් ලෙස, පිළිවෙලින් අඛණ්ඩතාව, සේවා සහ ඉදිරිපත් කිරීමේ ස්ථර වල. එමනිසා, ඔබට ඔබේ සංරචක පංති @ සංයුක්තය සමඟ විවරණය කළ හැකිය, නමුත් ඒවා වෙනුවට @Ropository, ervService, හෝ onController සමඟ විවරණය කිරීමෙන්, ඔබේ පන්ති මෙවලම් මගින් සැකසීමට හෝ අංශ සමඟ සම්බන්ධ වීමට වඩාත් සුදුසු වේ. නිදසුනක් ලෙස, මෙම ඒකාකෘති විවරණයන් ලක්ෂ්‍ය කට් සඳහා පරිපූර්ණ ඉලක්ක කරයි. වසන්ත රාමුවේ අනාගත නිකුතුවලදී e රිපොසිටරි, erv සේවා සහ on පාලකය අමතර අර්ථකථන රැගෙන යා හැකිය. මේ අනුව, ඔබේ සේවා ස්ථරය සඳහා @ සංයුක්ත හෝ service සේවා භාවිතා කිරීම අතර ඔබ තෝරා ගන්නේ නම්, erv සේවාව පැහැදිලිවම වඩා හොඳ තේරීම වේ. ඒ හා සමානව, ඉහත සඳහන් කළ පරිදි, ඔබේ ස්ථරයේ ස්වයංක්‍රීය ව්‍යතිරේක පරිවර්තනය සඳහා සලකුණු කාරකයක් ලෙස e නිධිය දැනටමත් සහාය දක්වයි.


13

@Component යනු ඉහළ මට්ටමේ ජනක විවරණයකි, එමඟින් විවරණය කළ බෝංචි පරිලෝකනය කර DI බහාලුම්වල ලබා ගත හැකිය

@Repository විශේෂිත විවරණයන් වන අතර එය DAO පංති වලින් ඉවත් නොකළ සියලු ව්‍යතිරේකයන් පරිවර්තනය කිරීමේ ලක්ෂණය ගෙන එයි

@Serviceවිශේෂිත විවරණයකි. එය මේ වන විට කිසිදු නව අංගයක් ගෙන එන්නේ නැති නමුත් එය බෝංචි වල අභිප්‍රාය පැහැදිලි කරයි

Ont පාලකය යනු විශේෂිත විවරණයකි, එය බෝංචි එම්වීසී දැනුවත් කරයි. @RequestMapping , එම සියලුම

මෙන්න වැඩි විස්තර


12

සංරචක-නිධිය-සේවා-විවරණ අතර ඇති වෙනස කුමක්ද යන්න පැහැදිලි කිරීමට ප්‍රමාණවත් තරම් පිළිතුරු මෙහි ඇත. අතර වෙනස බෙදා ගැනීමට මම කැමතියි@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 ඔබට වසන්ත වෙබ් එම්වීසී හි දර්ශනයක් නැවත ලබා දිය හැකිය.

වඩාත් සවිස්තරාත්මක දැක්ම


11

@Serviceවසන්ත ප්රලේඛනය උපුටා දක්වන්නේ නම්,

විවරණය කරන ලද පංතියක් යනු “සේවාවක්” බව මුලින් නිර්වචනය කර ඇත්තේ ඩොමේන් ඩ්‍රයිවින් ඩිසයින් (එවාන්ස්, 2003) විසිනි. පංතියක් යනු “ව්‍යාපාර සේවා මුහුණත” (මූලික J2EE රටා අර්ථයෙන්) හෝ ඊට සමාන දෙයක් බව ද සඳහන් කළ හැකිය. මෙම විවරණය පොදු අරමුණු ඒකාකෘති වර්ගයක් වන අතර තනි කණ්ඩායම් ඔවුන්ගේ අර්ථ නිරූපණය පටු කොට සුදුසු පරිදි භාවිතා කළ හැකිය.

ඔබ එරික් එවාන්ස් විසින් වසම මත පදනම් වූ සැලසුම දෙස බැලුවහොත්,

SERVICE යනු ENTITIES සහ VALUE OBJECTS සිදු කරන ආකාරයට, රාජ්‍යය සංවර්‍ධනය නොකර, ආකෘතියේ තනිවම සිටින අතුරු මුහුණතක් ලෙස ඉදිරිපත් කරන මෙහෙයුමකි. සේවා තාක්ෂණික රාමුවල පොදු රටාවකි, නමුත් ඒවා වසම් ස්ථරයේ ද යෙදිය හැකිය. නාම සේවාව වෙනත් වස්තූන් සමඟ ඇති සම්බන්ධතාවය අවධාරණය කරයි. ENTITIES සහ VALUE OBJECTS මෙන් නොව, එය තනිකරම අර්ථ දක්වා ඇත්තේ එය සේවාදායකයෙකුට කළ හැකි දේ අනුව ය. සේවාවක් යනු ආයතනයක් වෙනුවට ක්‍රියාකාරකමක් සඳහා නම් කිරීමට නැඹුරු වේ. එය නාම පදයකට වඩා ක්‍රියා පදයකි. සේවාවකට තවමත් වියුක්ත, හිතාමතා අර්ථ දැක්වීමක් තිබිය හැකිය; එය වස්තුවක අර්ථ දැක්වීමට වඩා වෙනස් රසයක් ඇත. සේවාවක් සඳහා තවමත් නිශ්චිත වගකීමක් තිබිය යුතු අතර, එම වගකීම සහ එය ඉටු කරන අතුරු මුහුණත වසම් ආකෘතියේ කොටසක් ලෙස අර්ථ දැක්විය යුතුය. මෙහෙයුම් නම් පැමිණිය යුත්තේ UBIQUITOUS LANGUAGE වෙතින් හෝ එයට හඳුන්වා දිය යුතුය. පරාමිතීන් සහ ප්‍රති results ල වසම් වස්තු විය යුතුය. සේවා යුක්තිසහගත ලෙස භාවිතා කළ යුතු අතර ඔවුන්ගේ සියලු හැසිරීම් වල ENTITIES සහ VALUE අරමුණු ඉවත් කිරීමට ඉඩ නොදිය යුතුය. නමුත් මෙහෙයුමක් ඇත්ත වශයෙන්ම වැදගත් වසම් සංකල්පයක් වන විට, සේවාවක් මොඩල් ඩ්‍රයිවින් ඩිසයින් හි ස්වාභාවික කොටසක් සාදයි. කිසියම් දෙයක් සැබවින්ම නිරූපණය නොකරන ව්‍යාජ වස්තුවක් ලෙස නොව, සේවාවක් ලෙස ආකෘතියේ ප්‍රකාශයට පත් කර ඇති අතර, හුදකලා මෙහෙයුම කිසිවෙකු නොමඟ නොයනු ඇත. සේවාවක් මොඩල් ඩ්‍රයිවින් ඩිසයින් හි ස්වාභාවික කොටසකි. කිසියම් දෙයක් නිරූපණය නොකරන ව්‍යාජ වස්තුවක් ලෙස නොව, සේවාවක් ලෙස ආකෘතියේ ප්‍රකාශයට පත් කර ඇති අතර, හුදකලා මෙහෙයුම කිසිවෙකු නොමඟ නොයනු ඇත. සේවාවක් මොඩල් ඩ්‍රයිවින් ඩිසයින් හි ස්වාභාවික කොටසකි. කිසියම් දෙයක් සැබවින්ම නිරූපණය නොකරන ව්‍යාජ වස්තුවක් ලෙස නොව, සේවාවක් ලෙස ආකෘතියේ ප්‍රකාශයට පත් කර ඇති අතර, හුදකලා මෙහෙයුම කිසිවෙකු නොමඟ නොයනු ඇත.

සහ Repositoryඑරික් එවාන්ස් අනුව,

නිධියක් යනු කිසියම් වර්ගයක සියලුම වස්තු සංකල්පීය කට්ටලයක් ලෙස නිරූපණය කරයි (සාමාන්‍යයෙන් අනුකරණය කරනු ලැබේ). වඩාත් සවිස්තරාත්මක විමසුම් හැකියාවක් හැර, එය එකතුවක් ලෙස ක්‍රියා කරයි. සුදුසු වර්ගයේ වස්තු එකතු කර ඉවත් කරනු ලබන අතර, REPOSITORY පිටුපස ඇති යන්ත්‍රෝපකරණ ඒවා ඇතුළු කිරීම හෝ දත්ත ගබඩාවෙන් මකා දැමීම. මෙම නිර්වචනය මඟින් මුල් ජීවන චක්‍රයේ සිට අවසානය දක්වා AGGREGATES හි මූලයන් වෙත ප්‍රවේශය සැපයීම සඳහා ඒකාබද්ධ වගකීම් සමූහයක් රැස් කරයි.


9

නිධිය සහ සේවාව යනු සංරචක විවරණයේ දරුවන් ය . ඉතින්, ඒවා සියල්ලම සංරචක වේ. නිධිය සහ සේවාව එය පුළුල් කරන්න. හරියටම කොහොමද? සේවාවට ඇත්තේ දෘෂ්ටිවාදාත්මක වෙනසක් පමණි: අපි එය සේවාවන් සඳහා භාවිතා කරමු. නිධිය තුළ සුවිශේෂී ව්‍යතිරේක හසුරුවන්නෙකු සිටී.


6

ඒකාකෘති පැහැදිලි කිරීම:

  • @Service- ඔබගේ සියලුම සේවා පන්ති @ සේවා සමඟ විවරණය කරන්න. මෙම ස්තරය වැඩ ඒකකය දනී. ඔබේ සියලු ව්‍යාපාර තර්කනය සේවා පන්තිවල ඇත. සාමාන්‍යයෙන් සේවා ස්ථරයේ ක්‍රම ගනුදෙනු යටතේ ආවරණය වේ. එක් ගනුදෙනුවක් අසමත් වුවහොත් සියලුම ගනුදෙනු ආපසු හැරවිය යුතු නම් ඔබට සේවා ක්‍රමයෙන් DAO ඇමතුම් කිහිපයක් කළ හැකිය.
  • @Repository- ඔබගේ සියලුම DAO පන්ති @Repository සමඟ විවරණය කරන්න. ඔබගේ සියලු දත්ත සමුදා ප්‍රවේශ තර්කනය DAO පන්තිවල තිබිය යුතුය.
  • @Component - සංරචක ඒකාකෘති සමඟ ඔබේ අනෙකුත් සංරචක (උදාහරණයක් ලෙස REST සම්පත් පන්ති) විවරණය කරන්න.
  • @Autowired - ස්වයංක්‍රීයව කම්බි වෙනත් බෝංචි ඔබේ පන්තිවලට @Autowired annotation භාවිතයෙන් ඉඩ දෙන්න.

@Componentඕනෑම වසන්ත-කළමනාකරණය කළ සංරචකයක් සඳහා සාමාන්‍ය ඒකාකෘති වර්ගයකි. @Repository,, @Serviceසහ වඩාත් නිශ්චිත භාවිත අවස්ථා සඳහා @Controllerවිශේෂීකරණයන් වේ @Component, නිදසුනක් ලෙස, පිළිවෙලින් අඛණ්ඩතාව, සේවා සහ ඉදිරිපත් කිරීමේ ස්ථර වල.

මුලින් පිළිතුරු දුන්නේ මෙහි ය .


6

On සංයුක්ත, e නිධිය, ont පාලක සහ erv සේවා විවරණ අතර වෙනස

P සංයුක්ත - සාමාන්‍ය සහ යෙදුම හරහා භාවිතා කළ හැකිය.
Erv සේවා - සේවා ස්ථර මට්ටමින් පන්ති විවරණය කරන්න.
Ont පාලකය - ඉදිරිපත් කිරීමේ ස්ථර මට්ටමින් පන්ති විවරණය කරන්න, ප්‍රධාන වශයෙන් වසන්ත එම්වීසී හි භාවිතා වේ.
Ep නිධිය - දත්ත සමුදා ගබඩාවක් ලෙස ක්‍රියා කරන ස්ථර ස්ථරයේ පන්ති විවරණය කරන්න.

@Controller= @Component (අභ්යන්තර කාරක සභාවකින්) + ඉදිරිපත් ස්ථරය විශේෂාංග
@Service= @Component (අභ්යන්තර කාරක සභාවකින්) + සේවා ස්ථරය විශේෂාංග
@Component= සත සංරචක (බෝංචි)
@Repository= @Component (අභ්යන්තර කාරක සභාවකින්) + දත්ත ස්ථරය විශේෂාංග (වසම් බෝංචි කටයුතු සඳහා භාවිතයට)


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>විවරණ විශේෂ වේ, මන්ද අප xxx-servlet.xml ගොනුවට එකතු කරන විට , වසන්තය ස්වයංක්‍රීයව සන්දර්භය නිර්මාණය / පැටවීමේ අවධියේදී ඉහත විවරණයන් සමඟ විවරණය කර ඇති පන්තිවල වස්තුව ස්වයංක්‍රීයව නිර්මාණය කරයි.


2

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

@Componentවසන්තය විසින් පාලනය කරනු ලබන සංරචක සඳහා Generic බලපත්රය යටතේ අවසර ලබා ඇත ඒකාකෘති යනු @Repository, @Serviceසහ @Controller@Componentවැඩි යොදාගැනීම සඳහා specializations:

  • @Repository නොපසුබට උත්සාහය සඳහා
  • @Service සේවා සහ ගනුදෙනු සඳහා
  • @Controller MVC පාලකයන් සඳහා

ඇයි භාවිතය @Repository, @Service, @Controllerකට @Component? අපගේ සංරචක පංති @ සංයුතිය සමඟ සලකුණු කළ හැකිය, නමුත් ඒ වෙනුවට අපි අපේක්ෂිත ක්‍රියාකාරීත්වයට අනුවර්තනය වන විකල්පය භාවිතා කරමු. එක් එක් විශේෂිත අවස්ථාවෙහිදී අපේක්ෂිත ක්‍රියාකාරීත්වයට අපගේ පන්ති වඩාත් සුදුසු වේ.

සමග ග්රන්ථ ඒ පන්තියේ @Repositoryorg.springframework.dao.DataAccessException සමග කටයුතු වඩා හොඳ පරිවර්තන, කියවිය හැකි දෝෂයක් ඇත. දත්ත වලට ප්‍රවේශ වන සංරචක ක්‍රියාත්මක කිරීම සඳහා වඩාත් සුදුසුය (DataAccessObject හෝ DAO).

@Controllerවසන්ත වෙබ් එම්වීසී යෙදුමක පාලක කාර්යභාරයක් ඉටු කරන විවරණය කළ පන්තියක්

@Serviceව්‍යාපාර තාර්කික සේවාවන්හි කාර්යභාරයක් ඉටු කරන විවරණය කළ පන්තියක් , උදාහරණයක් ලෙස DAO කළමණාකරු (ෆැසෙඩ්) සඳහා ෆැසෙඩ් රටාව සහ ගනුදෙනු හැසිරවීම


1

මෙම නිදර්ශනය සරල කිරීම සඳහා, භාවිතා කිරීමේ අවස්ථාව අනුව තාක්‍ෂණය සලකා බලමු, මෙම විවරණයන් එන්නත් කිරීමට භාවිතා කරන අතර මා වචනානුසාරයෙන් “ එන්නත් කිරීමට භාවිතා කර ඇත ” යනුවෙන් පැවසූ පරිදි, එයින් අදහස් වන්නේ ඔබ යැපුම් එන්නත් “DI” භාවිතා කරන්නේ කෙසේදැයි දන්නේ නම් සහ ඔබ එසේ නම්, ඔබ සැමවිටම මෙම ව්‍යාඛ්‍යාවන් සොයනු ඇති අතර, මෙම ස්ටීරියෝ වර්ග සමඟ පන්ති විවරණය කිරීමෙන් , ඔබ DI කන්ටේනරයට දැනුම් දෙන්නේ වෙනත් ස්ථානවල එන්නත් කිරීමට සූදානම්ව සිටින ලෙස ස්කෑන් කරන ලෙසයි. මෙය ප්‍රායෝගික ඉලක්කයයි.

දැන් එක් එක් දෙසට ගමන් කරමු; පළමුවන සේවා , ඔබ නිශ්චිත ව්‍යාපාරික නඩුවක් සඳහා යම් තර්කනයක් ගොඩනඟන්නේ නම්, ඔබේ ව්‍යාපාර තර්කනය අඩංගු ස්ථානයක එය වෙන් කළ යුතුය, මෙම සේවාව සාමාන්‍ය පන්තියකි , නැතහොත් ඔබට අවශ්‍ය නම් එය අතුරු මුහුණතක් ලෙස භාවිතා කළ හැකිය, එය ලියා ඇත්තේ මෙය

@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;
}

ඔබ ඒවා එන්නත් කරන විට සියල්ලම එක හා සමානයි, e නිධිය එය නිධිය රටා නිධිය සැලසුම් රටාව සඳහා ක්‍රියාත්මක කිරීමට අදාළ වන අතුරු මුහුණතක් වන අතර සාමාන්‍යයෙන් එය භාවිතා කරනුයේ ඔබ යම් දත්ත ගබඩාවක් හෝ දත්ත ගබඩාවක් සමඟ ගනුදෙනු කරන විට වන අතර එය ඔබට බහුකාර්ය අඩංගු වේ දත්ත සමුදා මෙහෙයුම් හැසිරවීමට ඔබට සූදානම් කිරීම; එය CrudRepository , JpaRepository ආදිය විය හැකිය.

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

අවසාන වශයෙන් @ සංයුක්තය , මෙය වසන්තයේ ලියාපදිංචි බෝංචි සඳහා වන සාමාන්‍ය ස්වරූපයයි, එම වසන්තය සැමවිටම සොයන්නේ @ ලියාපදිංචි කළ යුතු සං on ටකය ලෙස සලකුණු කර ඇති බෝංචි, එවිට @ සේවා සහ os නිධිය යන දෙකම on සංයුක්තයේ විශේෂ අවස්ථා වේ, කෙසේ වෙතත් පොදු භාවිත අවස්ථාව සංරචකය යනු ඔබ සෘජු ව්‍යාපාරික අවස්ථාවක් ආවරණය කිරීම සඳහා නොව තනිකරම තාක්ෂණික යමක් සාදන විටය! දින හැඩතල ගැන්වීම හෝ විශේෂ ඉල්ලීම් අනුක්‍රමිකකරණ යාන්ත්‍රණයක් ලබා දීම වැනි ය.


1

On සංයුක්ත වින්‍යාස පංතියේ බීන් විවරණය ලෙස ක්‍රියා කරයි, වසන්ත සන්දර්භය තුළ බෝංචි ලියාපදිංචි කරන්න. එය @ සේවා, os නිධිය සහ ont පාලක විවරණය සඳහා මව් වේ.

Erv සේවා , on සංයුක්ත විවරණය විස්තාරණය කරන අතර නම් කිරීමේ වෙනසක් ඇත.

E රිපෝසිටරි - on සංයුක්ත විවරණය විස්තාරණය කර සියලු දත්ත සමුදා ව්‍යතිරේකයන් ඩේටා ඇක්සස්එක්සෙෂන් වෙත පරිවර්තනය කරයි .

Ont පාලකය - MVC රටාවේ පාලකය ලෙස ක්‍රියා කරයි. යැවූ තැනැත්තා සිතියම් ගත කළ ක්‍රම සඳහා එවැනි විවරණය කළ පන්ති පරිලෝකනය කරයි, @RequestMapping විවරණ හඳුනා ගනී.


1

මෙහි ඉදිරිපත් කර ඇති පිළිතුරු බොහෝ දුරට තාක්‍ෂණිකව නිවැරදි ය, නමුත් ප්‍රතිචාර ලැයිස්තුව දිගු වුවද මෙය පතුලේ වනු ඇත. ඇත්ත වශයෙන්ම නිවැරදි ප්‍රතිචාරයක් මෙහි ද තැබීම වටී යැයි මම සිතුවෙමි, යමෙකු එයට බාධා කර වටිනා යමක් ඉගෙන ගන්නේ නම් එය. ඉතිරි පිළිතුරු වැරදි බව නොවේ, එය නිවැරදි නොවන බව ය. ට්‍රොල්ස් සමූහය නැවැත්වීම සඳහා, ඔව්, තාක්‍ෂණිකව මෙම විවරණයන් 5 ලදායී ලෙස එකම දෙය වන අතර වසන්තය දක්වා පවා එකිනෙකට හුවමාරු කළ හැකි බව මම දනිමි. දැන්, නිවැරදි පිළිතුර සඳහා:

මෙම විවරණ තුන මුළුමනින්ම වෙනස් දේවල් වන අතර ඒවා එකිනෙකට හුවමාරු නොවේ. ඔබට එය පැවසිය හැක්කේ ඒවායින් එකක් පමණක් නොව ඒවා තුනක් ඇති බැවිනි. ඒවා එකිනෙකට හුවමාරු කර ගැනීමට අදහස් නොකෙරේ, ඒවා ක්‍රියාත්මක වන්නේ අලංකාරයෙන් සහ පහසුවෙනි.

නවීන ක්‍රමලේඛනය යනු නව නිපැයුම්, කලාව, තාක්‍ෂණය සහ සන්නිවේදනය විවිධ අනුපාතයන්ගෙන් ය. කේතය සාමාන්‍යයෙන් එහි ලිවීමට වඩා බොහෝ විට කියවන බැවින් සන්නිවේදන බිට් සාමාන්‍යයෙන් ඉතා වැදගත් වේ. ක්‍රමලේඛකයෙකු ලෙස ඔබ තාක්ෂණික ගැටළුව විසඳීමට පමණක් නොව, ඔබේ කේතය කියවන අනාගත ක්‍රමලේඛකයින් සමඟ ඔබේ අභිප්‍රාය සන්නිවේදනය කිරීමට ද උත්සාහ කරයි. මෙම ක්‍රමලේඛකයින් ඔබේ මව් භාෂාව හෝ ඔබේ සමාජ පරිසරය බෙදා නොගත හැකි අතර අනාගතයේදී ඔවුන් ඔබේ කේතය වසර 50 ක් කියවමින් සිටිය හැකිය (එය ඔබ සිතන තරම් අපහසු නොවේ). අනාගතයට එතරම් effectively ලදායී ලෙස සන්නිවේදනය කිරීම දුෂ්කර ය. එමනිසා, අපට ලබා ගත හැකි පැහැදිලි, වඩාත්ම කාර්යක්ෂම, නිවැරදි හා සන්නිවේදන භාෂාව භාවිතා කිරීම අත්‍යවශ්‍ය වේ.

උදාහරණයක් ලෙස, @Repositoryඅප ගබඩාවක් ලියන විට භාවිතා කිරීම අත්‍යවශ්‍ය වේ @Component. දෙවැන්න නිධියකට විවරණය කිරීම ඉතා දුර්වල තේරීමකි, මන්ද එය අප ගබඩාවක් දෙස බලන බවක් නොපෙන්වයි. නිධියක් යනු වසන්ත බෝංචි යැයි අපට උපකල්පනය කළ හැකිය, නමුත් සංරචකයක් නිධියක් නොවේ. @Repositoryඅපගේ භාෂාවෙන් අප පැහැදිලිව හා නිශ්චිතව සිටීමත් සමඟ . අපි පැහැදිලිවම කියන්නේ මෙය ගබඩාවක් බවයි. සමඟ@Componentඔවුන් කියවන්නේ කුමන ආකාරයේ සං component ටකයක්ද යන්න තීරණය කිරීම සඳහා අපි එය පා er කයාට තබන අතර, අර්ථය අනුමාන කිරීම සඳහා ඔවුන්ට මුළු පන්තියම (සහ සමහර විට උප පංති හා අතුරුමුහුණත් සහිත ගසක්) කියවීමට සිදුවේ. පංතිය a ත අනාගතයේ දී පා repro කයෙකු විසින් ගබඩාවක් නොවන බවට වැරදි ලෙස අර්ථකථනය කළ හැකි අතර, මෙම ගබඩාවට අර්ධ වශයෙන් වගකිව යුතුව තිබුනේ මෙය ගබඩාවක් බව හොඳින් දැන සිටි අප අපගේ භාෂාවෙන් නිශ්චිත වීමට අසමත් වූ බැවිනි. අපේ අභිප්‍රාය effectively ලදායී ලෙස සන්නිවේදනය කරන්න.

මම අනෙක් උදාහරණ වෙත නොයන්නෙමි, නමුත් මට හැකි තරම් පැහැදිලිව ප්‍රකාශ කරමි: මෙම විවරණ සම්පූර්ණයෙන්ම වෙනස් දේවල් වන අතර ඒවායේ අභිප්‍රාය අනුව සුදුසු පරිදි භාවිතා කළ යුතුය. @Repositoryගබඩා ගබඩාවන් සඳහා වන අතර වෙනත් විවරණයන් නිවැරදි නොවේ. @Serviceසේවා සඳහා වන අතර වෙනත් ව්‍යාඛ්‍යාවක් නිවැරදි නොවේ. @Componentයනු ගබඩාවන් හෝ සේවාවන් නොවන සංරචක සඳහා වන අතර, මේ දෙකෙන් එකක්ම එහි ස්ථානයේ භාවිතා කිරීම ද වැරදිය. එය සම්පාදනය කිරීමට ඉඩ ඇත, එය ඔබගේ පරීක්ෂණ ධාවනය කර සමත් වීමට පවා ඉඩ ඇත, නමුත් එය වැරදියි, ඔබ මෙය කරන්නේ නම් මම ඔබෙන් (වෘත්තීය වශයෙන්) අඩුවෙන් සිතමි.

වසන්තය පුරාම මේ සඳහා උදාහරණ ඇත (සහ පොදුවේ වැඩසටහන්කරණය). @ControllerREST API එකක් ලිවීමේදී ඔබ භාවිතා නොකළ යුතුය @RestController. වලංගු විකල්පයක් වන @RequestMappingවිට ඔබ භාවිතා නොකළ යුතුය @GetMapping. ආදිය. ඔබේ අභිප්‍රාය ඔබේ පා readers කයන්ට සන්නිවේදනය කිරීම සඳහා ඔබට කළ හැකි නිශ්චිත නිශ්චිත හා නිවැරදි භාෂාව තෝරා ගත යුතුය , එසේ නොමැතිනම් ඔබ ඔබේ පද්ධතියට අවදානම් හඳුන්වා දෙන අතර අවදානමට පිරිවැයක් ඇත.


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

මේ සියල්ල StereoType annotations.tio අපගේ පන්ති අයොක් බහාලුම්වල වසන්ත බෝංචි බවට පත් කිරීම සඳහා ප්‍රයෝජනවත් වේ,

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.