Viac na
Aký je rozdiel medzi anotáciami @Component, @Repository & @Service v jazyku Spring?
Môžu sa anotácie @Component
, @Repository
a @Service
používať v systéme Spring zameniteľne, alebo okrem funkcie notačného prostriedku poskytujú nejakú konkrétnu funkcionalitu?
Inými slovami, ak mám triedu Service a zmením anotáciu z @Service
na @Component
, bude sa stále správať rovnako?
Alebo má anotácia vplyv aj na správanie a funkčnosť triedy?
1957
3
Z dokumentácie k jari:
V Spring 2.0 a novších verziách je anotácia
@Repository
značkou preSú takmer rovnaké - všetky znamenajú, že trieda je Spring bean.
@Service
,@Repository
a@Controller
sú špecializované@Component
. Môžete si vybrať, či s nimi chcete vykonávať špecifické akcie. Napríklad:@Controller
beans používa spring-mvc@Repository
beans sú vhodné na preklad výnimiek z perzistencieĎalšou vecou je, že komponenty sémanticky označujete do rôznych vrstiev.
Jedna z vecí, ktorú ponúka
@Component
, je, že ňou môžete anotovať ďalšie anotácie a potom ich používať rovnakým spôsobom ako@Service
.Nedávno som napríklad vytvoril:
Takže všetky triedy s anotáciou
@ScheduledJob
sú spring beans a okrem toho sú registrované ako quartz jobs. Musíte len poskytnúť kód, ktorý spracuje konkrétnu anotáciu.Použitie anotácií
@Service
a@Repository
je dôležité z hľadiska pripojenia k databáze.@Service
pre všetky pripojenia k DB typu webová služba@Repository
pre všetky vaše pripojenia k DB typu stored procAk nepoužijete správne anotácie, môžete sa stretnúť s výnimkami commit overridden rollback transakciami. Počas záťažového testu uvidíte výnimky, ktoré súvisia s rollback transakciami JDBC.