Bean-kobling: @Component, @Service, @Repository
Bruk stereotypannotasjoner, definer beans med @Bean og forstå komponentskanning.
Bean-kobling: @Component, @Service, @Repository er en gratis leksjon i Java Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Java Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Java Academy inneholder totalt 4 leksjoner.
Stereotypeannotasjoner
Spring tilbyr stereotypeannotasjoner som markerer klasser som Spring-administrerte beans og uttrykker hvilken rolle de har: @Component (generisk), @Service (forretningslogikk), @Repository (datatilgang), @Controller/@RestController (web-lag).
@Component: Generisk bean
Alle klasser som er annotert med @Component, oppdages under komponentskanningen og registreres som en Spring-bean. Dette er grunnlaget for alle de andre stereotypene.
@Component
public class EmailFormatter {
public String format(String to, String subject) {
return "To: " + to + "\nSubject: " + subject;
}
}@Service: Lag for forretningslogikk
@Service er en spesialisering av @Component som semantisk angir at klassen er en serviceklasse. Spring behandler den på samme måte som @Component, men den uttrykker hensikten og kan brukes av AOP-rådgivere.
@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: Lag for datatilgang
@Repository markerer DAO-klasser. Spring legger til automatisk oversetting av persistensunntak: SQLException og leverandørspesifikke unntak pakkes inn i Springs DataAccessException-hierarki.
@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 i @Configuration-klasser
Bruk @Bean på en metode i en @Configuration-klasse for å registrere beans manuelt – nyttig for tredjepartsklasser som De ikke kan annotere.
@Configuration
public class AppConfig {
@Bean
public ObjectMapper objectMapper() {
return new ObjectMapper().registerModule(new JavaTimeModule());
}
@Bean
public RestTemplate restTemplate() { return new RestTemplate(); }
}Komponentskanning
@SpringBootApplication starter komponentskanning fra applikasjonens pakke og nedover. Klasser i underpakker oppdages automatisk. Bruk @ComponentScan(basePackages=...) for å tilpasse dette.
// Explicit scan (rarely needed in Spring Boot):
@SpringBootApplication
@ComponentScan(basePackages = {"com.example.app", "com.example.shared"})
public class MyApp { ... }Navngivning av beans
Som standard er bean-navnet klassenavnet med liten forbokstav (OrderService → orderService). Angi et egendefinert navn: @Service("orders") eller @Bean("myMapper").
@Service("orderSvc")
public class OrderService { ... }
// Inject by name:
@Autowired @Qualifier("orderSvc")
private OrderService svc;Bean-scopes
Standardomfanget er singleton (én instans per Spring-kontekst). Andre scopes er prototype (en ny instans for hver injeksjon), request og session (bare for web).
@Service
@Scope("prototype")
public class ReportBuilder {
private List<String> lines = new ArrayList<>();
public void addLine(String line) { lines.add(line); }
}@Primary og @Qualifier for entydig valg
Når flere beans implementerer det samme grensesnittet, kan De bruke @Primary til å markere standardvalget, eller @Qualifier("name") ved injeksjonspunktet for å velge en bestemt bean.
@Service @Primary
public class CacheUserService implements UserService { ... }
@Service
public class DbUserService implements UserService { ... }
// Inject specific one:
@Autowired @Qualifier("dbUserService")
private UserService userService;Forsinket initialisering
Som standard opprettes singleton-beans ved oppstart. Annoter med @Lazy for å utsette opprettelsen til første gangs bruk – nyttig for kostbare beans som sjelden brukes.
@Service @Lazy
public class HeavyReportService {
public HeavyReportService() { System.out.println("Created on first use"); }
}@PostConstruct og @PreDestroy
Kjør initialiseringslogikk etter avhengighetsinjeksjon med @PostConstruct. Frigjør ressurser før beanen ødelegges med @PreDestroy.
@Service
public class CacheService {
@PostConstruct
public void init() { System.out.println("Cache warming up..."); }
@PreDestroy
public void cleanup() { System.out.println("Cache cleared."); }
}Hurtigsjekk
Hvilken ekstra funksjonalitet tilfører @Repository sammenlignet med @Component?
Oppsummering
Bruk @Service for forretningslogikk, @Repository for DAO-er, @Component for hjelpeklasser og @Bean for tredjepartstyper. @Primary/@Qualifier løser konflikter mellom flere beans. Bruk @PostConstruct/@PreDestroy for livssyklusmekanismer.
Lær deg Java med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 104
- Leksjoner
- 374
Ofte stilte spørsmål
Er leksjonen «Bean-kobling: @Component, @Service, @Repository» gratis?
Ja – hele teksten i «Bean-kobling: @Component, @Service, @Repository» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Java Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Java Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Bean-kobling: @Component, @Service, @Repository»?
Bruk stereotypannotasjoner, definer beans med @Bean og forstå komponentskanning. Du øver på Java Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Java Academy?
Ingen tidligere erfaring er nødvendig. Java Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.
Hvor lang tid tar leksjonen «Bean-kobling: @Component, @Service, @Repository»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Java Academy-leksjonen?
Ja. Alle Java Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Autokonfigurering og Spring Boot-startere
- Applikasjonsegenskaper og profiler
- Bean-kobling: @Component, @Service, @Repository
- Konstruktørinjeksjon og sirkulære avhengigheter