Περισσότερα
Ποια είναι η διαφορά μεταξύ των σχολίων @Component, @Repository & @Service στην Άνοιξη;
Μπορούν οι σχολιασμοί @Component
, @Repository
και @Service
να χρησιμοποιηθούν εναλλακτικά στην Spring ή παρέχουν κάποια συγκεκριμένη λειτουργικότητα εκτός από το να λειτουργούν ως μέσο συμβολισμού;
Με άλλα λόγια, αν έχω μια κλάση Service και αλλάξω τον σχολιασμό από @Service
σε @Component
, θα εξακολουθεί να συμπεριφέρεται με τον ίδιο τρόπο;
Ή μήπως ο σχολιασμός επηρεάζει και τη συμπεριφορά και τη λειτουργικότητα της κλάσης;
1957
3
Από την Τεκμηρίωση της Άνοιξης:
Είναι σχεδόν ίδιες - όλες σημαίνουν ότι η κλάση είναι ένα φασόλι της Spring. Οι
@Service
,@Repository
και@Controller
είναι εξειδικευμένα@Component
. Μπορείτε να επιλέξετε να εκτελέσετε συγκεκριμένες ενέργειες με αυτά. Για παράδειγμα:@Controller
χρησιμοποιούνται από το spring-mvc@Repository
είναι επιλέξιμα για μετάφραση εξαιρέσεων εμμονήςΈνα άλλο πράγμα είναι ότι ορίζετε τα συστατικά σημασιολογικά σε διαφορετικά επίπεδα.
Ένα πράγμα που προσφέρει το
@Component
είναι ότι μπορείτε να επισημάνετε άλλες επισημάνσεις με αυτό και στη συνέχεια να τις χρησιμοποιήσετε με τον ίδιο τρόπο όπως το@Service
.Για παράδειγμα, πρόσφατα έκανα:
Έτσι, όλες οι κλάσεις που σχολιάζονται με
@ScheduledJob
είναι spring beans και επιπλέον είναι καταχωρημένες ως quartz jobs. Απλά πρέπει να παρέχετε κώδικα που να χειρίζεται το συγκεκριμένο annotation.Η χρήση των σχολίων
@Service
και@Repository
είναι σημαντική από την άποψη της σύνδεσης με τη βάση δεδομένων.@Service
για όλες τις συνδέσεις σας με ΒΔ τύπου web service.@Repository
για όλες τις συνδέσεις σας με αποθηκευμένες διαδικασίες DB.Εάν δεν χρησιμοποιήσετε τις κατάλληλες επισημειώσεις, ενδέχεται να αντιμετωπίσετε εξαιρέσεις δέσμευσης που παρακάμπτονται από συναλλαγές επαναφοράς. Θα δείτε εξαιρέσεις κατά τη διάρκεια του stress load test που σχετίζονται με συναλλαγές roll back JDBC.