Daugiau
Kuo skiriasi @Component, @Repository & amp; @Service anotacijos "Spring" programoje?
Ar @Component
, @Repository
ir @Service
anotacijos gali būti naudojamos tarpusavyje "Spring" programoje, ar jos turi kokią nors konkrečią funkciją, išskyrus tai, kad yra tik užrašymo priemonė?
Kitaip tariant, jei turiu paslaugų klasę ir pakeisiu anotaciją iš @Service
į @Component
, ar ji vis tiek elgsis taip pat?
O gal anotacija taip pat turi įtakos klasės elgsenai ir funkcionalumui?
1957
3
Iš Pavasario dokumentacija:
Pavasaryje 2.0 ir vėlesnėse versijose anotacija
@Repository
yra žymuo, skirtasJie beveik vienodi - visi jie reiškia, kad klasė yra "Spring" pupelė.
@Service
,@Repository
ir@Controller
yra specializuotos@Component
. Su jomis galima pasirinkti atlikti konkrečius veiksmus. Pavyzdžiui:@Controller
pupelės naudojamos spring-mvc@Repository
pupelės gali būti verčiamos persistencijos išimtimisKitas dalykas - komponentus semantiškai priskirkite skirtingiems sluoksniams.
Vienas dalykas, kurį suteikia
@Component
, yra tai, kad juo galite anotuoti kitas anotacijas ir tada naudoti jas taip pat, kaip ir@Service
.Pavyzdžiui, neseniai padariau:
Taigi visos klasės, anotuotos su
@ScheduledJob
, yra spyruoklinės pupelės, be to, registruotos kaip kvarco darbo vietos. Jums tereikia pateikti kodą, kuris tvarko konkrečią anotaciją.Anotacijų
@Service
ir@Repository
naudojimas yra svarbus prisijungimo prie duomenų bazės požiūriu.@Service
visiems žiniatinklio paslaugų tipo DB prisijungimams.@@Repository
visiems saugomų proc tipo DB prisijungimams.Jei nenaudosite tinkamų anotacijų, galite susidurti su išimtimis, kurias panaikina grįžtamosios transakcijos. Atlikdami apkrovos testą pamatysite išimtis, susijusias su JDBC grįžtamaisiais sandoriais.