Collegamento dei bean: @Component, @Service, @Repository
Utilizzi le annotazioni stereotipo, definisca i bean con @Bean e comprenda la scansione dei componenti.
Collegamento dei bean: @Component, @Service, @Repository è una lezione Java Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Java Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Java Academy include 4 lezioni in totale.
Annotazioni stereotype
Spring fornisce annotazioni stereotype che contrassegnano le classi come bean gestiti da Spring e ne indicano il ruolo: @Component (generico), @Service (logica di business), @Repository (accesso ai dati), @Controller/@RestController (livello web).
@Component: bean generico
Qualsiasi classe annotata con @Component viene rilevata durante la scansione dei componenti e registrata come bean Spring. È la base di tutti gli altri stereotype.
@Component
public class EmailFormatter {
public String format(String to, String subject) {
return "To: " + to + "\nSubject: " + subject;
}
}@Service: livello della logica di business
@Service è una specializzazione di @Component che indica semanticamente una classe di servizio. Spring la tratta allo stesso modo di @Component, ma comunica l'intento e può essere utilizzata dagli advisor AOP.
@Service
public class OrderService {
private final OrderRepository repo;
public OrderService(OrderRepository repo) { this.repo = repo; }
public Order placeOrder(Cart cart) { /* business logic */ return repo.save(new Order(cart)); }
}@Repository: livello di accesso ai dati
@Repository contrassegna le classi DAO. Spring aggiunge la traduzione automatica delle eccezioni di persistenza: SQLException e le eccezioni specifiche del database vengono racchiuse nella gerarchia DataAccessException di Spring.
@Repository
public class JdbcUserRepository {
private final JdbcTemplate jdbc;
public JdbcUserRepository(JdbcTemplate jdbc) { this.jdbc = jdbc; }
public User findById(long id) {
return jdbc.queryForObject("SELECT * FROM users WHERE id=?",
new BeanPropertyRowMapper<>(User.class), id);
}
}@Bean nelle classi @Configuration
Utilizzi @Bean su un metodo all'interno di una classe @Configuration per registrare manualmente i bean: è utile per le classi di terze parti che non può annotare.
@Configuration
public class AppConfig {
@Bean
public ObjectMapper objectMapper() {
return new ObjectMapper().registerModule(new JavaTimeModule());
}
@Bean
public RestTemplate restTemplate() { return new RestTemplate(); }
}Scansione dei componenti
@SpringBootApplication avvia la scansione dei componenti a partire dal package dell'applicazione e proseguendo verso il basso. Le classi nei sottopackage vengono individuate automaticamente. Utilizzi @ComponentScan(basePackages=...) per personalizzare il comportamento.
// Explicit scan (rarely needed in Spring Boot):
@SpringBootApplication
@ComponentScan(basePackages = {"com.example.app", "com.example.shared"})
public class MyApp { ... }Denominazione dei bean
Per impostazione predefinita, il nome del bean è il nome della classe con la prima lettera minuscola (OrderService → orderService). Specifichi un nome personalizzato: @Service("orders") oppure @Bean("myMapper").
@Service("orderSvc")
public class OrderService { ... }
// Inject by name:
@Autowired @Qualifier("orderSvc")
private OrderService svc;Ambiti dei bean
L'ambito predefinito è singleton (una sola istanza per contesto Spring). Altri ambiti: prototype (una nuova istanza per ogni injection), request, session (solo web).
@Service
@Scope("prototype")
public class ReportBuilder {
private List<String> lines = new ArrayList<>();
public void addLine(String line) { lines.add(line); }
}@Primary e @Qualifier per risolvere le ambiguità
Quando più bean implementano la stessa interfaccia, utilizzi @Primary per contrassegnare quello predefinito oppure @Qualifier("name") nel punto di injection per selezionarne uno specifico.
@Service @Primary
public class CacheUserService implements UserService { ... }
@Service
public class DbUserService implements UserService { ... }
// Inject specific one:
@Autowired @Qualifier("dbUserService")
private UserService userService;Inizializzazione lazy
Per impostazione predefinita, i bean singleton vengono creati all'avvio. Annoti il bean con @Lazy per rimandarne la creazione al primo utilizzo: è utile per i bean costosi che vengono usati raramente.
@Service @Lazy
public class HeavyReportService {
public HeavyReportService() { System.out.println("Created on first use"); }
}@PostConstruct e @PreDestroy
Esegua la logica di inizializzazione dopo l'injection delle dipendenze con @PostConstruct. Libera le risorse prima della distruzione del bean con @PreDestroy.
@Service
public class CacheService {
@PostConstruct
public void init() { System.out.println("Cache warming up..."); }
@PreDestroy
public void cleanup() { System.out.println("Cache cleared."); }
}Verifica rapida
Quale comportamento aggiuntivo offre @Repository rispetto a @Component?
Riepilogo
Utilizzi @Service per la logica di business, @Repository per i DAO, @Component per le utility e @Bean per i tipi di terze parti. @Primary/@Qualifier risolvono i casi con più bean. Utilizzi @PostConstruct/@PreDestroy per gli hook del ciclo di vita.
Impara Java con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 104
- Lezioni
- 374
Domande Frequenti
La lezione «Collegamento dei bean: @Component, @Service, @Repository» è gratuita?
Sì — il testo completo di «Collegamento dei bean: @Component, @Service, @Repository» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Java Academy, passa a CoddyKit PRO. Il corso Java Academy include 4 lezioni in totale.
Cosa imparerò in «Collegamento dei bean: @Component, @Service, @Repository»?
Utilizzi le annotazioni stereotipo, definisca i bean con @Bean e comprenda la scansione dei componenti. Eserciti Java Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Java Academy?
Non è richiesta alcuna esperienza precedente. Java Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Collegamento dei bean: @Component, @Service, @Repository»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Java Academy?
Sì. Ogni lezione Java Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Configurazione automatica e starter di Spring Boot
- Proprietà dell'applicazione e profili
- Collegamento dei bean: @Component, @Service, @Repository
- Iniezione tramite costruttore e dipendenze circolari