Ali se lahko anotacije @Component
, @Repository
in @Service
v pomladi uporabljajo izmenično ali poleg tega, da služijo kot pripomoček za zapisovanje, zagotavljajo kakšno posebno funkcionalnost?
Z drugimi besedami, če imam razred Service in spremenim anotacijo iz @Service
v @Component
, ali se bo še vedno obnašal enako?
Ali pa anotacija vpliva tudi na obnašanje in funkcionalnost razreda?
V različici Spring 2.0 in novejših je anotacija @Repository
označevalec za
vsak razred, ki izpolnjuje vlogo ali stereotip (znan tudi kot Data Access Object ali DAO) skladišča. Ta označevalec se uporablja med drugim za je samodejno prevajanje izjem.
Spring 2.5 uvaja dodatne stereotipne opombe:
@Component
,@Service
in@Controller
.@Component
je splošni stereotip za katero koli komponento, ki jo upravlja Spring.@Repository
,@Service
in@Controller
so specializacije@Component
za bolj specifične primere uporabe, npr. na primer v plasteh za obstojnost, storitve in predstavitev, oziroma.Zato lahko svoje razrede komponent anotirate z
@Component
, vendar jih lahko anotirate z@Repository
,@Service
ali@Controller
namesto tega so vaši razredi bolj primerni za obdelavo z orodji ali za povezovanje z vidiki. Na primer, te stereotipne anotacije so idealne tarče za točkovne izreze.Če se torej odločate med uporabo
@Component
ali@Service
za svojo storitveno plast, je@Service
nedvomno boljša izbira. Podobno, kot je navedeno zgoraj, je@Repository
že podprt kot označevalec za samodejno prevajanje izjem v vaši plasti persistence.
┌────────────┬─────────────────────────────────────────────────────┐
│ 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) │
└────────────┴─────────────────────────────────────────────────────┘
So skoraj enaki - vsi pomenijo, da je razred Springov fižol. @Service
, @Repository
in @Controller
so specializirane @Component
. Z njimi lahko izberete izvajanje posebnih dejanj. Na primer:
@Controller
fižol uporablja spring-mvc@Repository
beans so primerni za prevajanje izjem persistenceDruga stvar je, da komponente semantično določite različnim plastem.
Ena od stvari, ki jo ponuja @Component
, je, da lahko z njo anotirate druge anotacije in jih nato uporabite na enak način kot @Service
.
Pred kratkim sem na primer naredil:
@Component
@Scope("prototype")
public @interface ScheduledJob {..}
Torej so vsi razredi, ki so anotirani z @ScheduledJob
, pomladanska zrna in poleg tega so registrirani kot kremenova opravila. Zagotoviti morate le kodo, ki obdeluje določeno anotacijo.
Uporaba anotacij @Service
in @Repository
je pomembna z vidika povezave s podatkovno bazo.
@Service
za vse povezave z DB, ki so tipa spletne storitve.@Repository
za vse svoje povezave s shranjenimi postopki DBČe ne uporabljate ustreznih opomb, se lahko soočite z izjemami, ki jih nadomeščajo transakcije povratka. Med stresnim obremenitvenim testom boste videli izjeme, ki so povezane s transakcijami JDBC za vračanje.