Mitä eroa on @Componentin, @Repository & @Service-merkintöjen välillä Springissä?
Voidaanko @Component
, @Repository
ja @Service
-merkintöjä käyttää Springissä vaihdellen vai onko niillä mitään erityistä toiminnallisuutta sen lisäksi, että ne toimivat merkintätapana?
Toisin sanoen, jos minulla on Service-luokka ja vaihdan annotaation @Service
:stä @Component
:iin, käyttäytyykö se edelleen samalla tavalla?
Vai vaikuttaako annotaatio myös luokan käyttäytymiseen ja toiminnallisuuteen?
1957
3
Spring Documentation:
Ne ovat lähes samat - kaikki ne tarkoittavat, että luokka on Spring-papu.
@Service
,@Repository
ja@Controller
ovat erikoistuneita@Component
eja. Niillä voi halutessaan suorittaa tiettyjä toimintoja. Esimerkiksi:@Controller
-papuja käytetään spring-mvc:ssä.@Repository
-pavut soveltuvat pysyvyyspoikkeusten kääntämiseen.Toinen asia on, että nimeät komponentit semanttisesti eri kerroksiin.
Yksi asia, jonka
@Component
tarjoaa, on se, että voit annotoida sillä muita annotaatioita ja käyttää niitä sitten samalla tavalla kuin@Service
.Esimerkiksi äskettäin tein:
Eli kaikki
@ScheduledJob
:lla annotoidut luokat ovat spring beaneja ja lisäksi ne on rekisteröity quartz jobsiksi. Sinun täytyy vain tarjota koodia, joka käsittelee kyseisen annotaation.@Service
- ja@Repository
-merkintöjen käyttö on tärkeää tietokantayhteyden kannalta.@Service
-merkintää kaikkiin verkkopalvelutyyppisiin tietokantayhteyksiin.@Repository
-merkintää kaikkiin tallennettuihin projektien tietokantayhteyksiin.Jos et käytä asianmukaisia merkintöjä, saatat joutua kohtaamaan sitoutumispoikkeuksia, jotka rollback-transaktiot ohittavat. Näet stressikuormitustestin aikana poikkeuksia, jotka liittyvät JDBC-tapahtumien palautukseen.