0Pricing
Java Academy · Ders

Bean Bağlama: @Component, @Service, @Repository

Stereotip ek açıklamalarını kullanın, @Bean ile bean'ler tanımlayın ve bileşen taramasını anlayın.

Bean Bağlama: @Component, @Service, @Repository, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.

Stereotip Ek Açıklamaları

Spring, sınıfları Spring tarafından yönetilen bean'ler olarak işaretleyen ve rollerini belirten stereotip ek açıklamaları sağlar: @Component (genel), @Service (iş mantığı), @Repository (veri erişimi), @Controller/@RestController (web katmanı).

@Component: Genel Bean

@Component ile ek açıklama eklenmiş tüm sınıflar, bileşen taraması sırasında algılanır ve Spring bean'i olarak kaydedilir. Diğer tüm stereotiplerin temelini oluşturur.

@Component
public class EmailFormatter {
    public String format(String to, String subject) {
        return "To: " + to + "\nSubject: " + subject;
    }
}

@Service: İş Mantığı Katmanı

@Service, anlamsal olarak bir hizmet sınıfını belirten @Component özelleştirmesidir. Spring, bunu @Component ile aynı şekilde ele alır; ancak bu ek açıklama amacı ifade eder ve AOP danışmanları tarafından kullanılabilir.

@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: Veri Erişimi Katmanı

@Repository, DAO sınıflarını işaretler. Spring, kalıcılık istisnaları için otomatik çeviri ekler: SQLException ve üreticiye özgü istisnalar, Spring'in DataAccessException hiyerarşisi içinde sarmalanır.

@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);
    }
}

@Configuration Sınıflarında @Bean

Bean'leri elle kaydetmek için bir @Configuration sınıfının içindeki bir yöntemde @Bean kullanın — ek açıklama ekleyemediğiniz üçüncü taraf sınıfları için kullanışlıdır.

@Configuration
public class AppConfig {
    @Bean
    public ObjectMapper objectMapper() {
        return new ObjectMapper().registerModule(new JavaTimeModule());
    }
    @Bean
    public RestTemplate restTemplate() { return new RestTemplate(); }
}

Bileşen Taraması

@SpringBootApplication, uygulamanın paketinden başlayarak alt paketlere doğru bileşen taramasını tetikler. Alt paketlerdeki sınıflar otomatik olarak keşfedilir. Özelleştirmek için @ComponentScan(basePackages=...) kullanın.

// Explicit scan (rarely needed in Spring Boot):
@SpringBootApplication
@ComponentScan(basePackages = {"com.example.app", "com.example.shared"})
public class MyApp { ... }

Bean Adlandırma

Varsayılan olarak bean adı, sınıf adının ilk harfi küçültülmüş hâlidir (OrderService → orderService). Özel bir ad belirtin: @Service("orders") veya @Bean("myMapper").

@Service("orderSvc")
public class OrderService { ... }
// Inject by name:
@Autowired @Qualifier("orderSvc")
private OrderService svc;

Bean Kapsamları

Varsayılan kapsam singleton'dır (Spring bağlamı başına bir örnek). Diğer kapsamlar: prototype (her enjeksiyonda yeni örnek), request, session (yalnızca web).

@Service
@Scope("prototype")
public class ReportBuilder {
    private List<String> lines = new ArrayList<>();
    public void addLine(String line) { lines.add(line); }
}

Belirsizliği Gidermek için @Primary ve @Qualifier

Aynı arayüzü uygulayan birden çok bean olduğunda varsayılanı işaretlemek için @Primary kullanın veya belirli bir bean'i seçmek üzere enjeksiyon noktasında @Qualifier("name") kullanın.

@Service @Primary
public class CacheUserService implements UserService { ... }
@Service
public class DbUserService implements UserService { ... }
// Inject specific one:
@Autowired @Qualifier("dbUserService")
private UserService userService;

Tembel Başlatma

Varsayılan olarak singleton bean'ler başlangıçta oluşturulur. Oluşturmayı ilk kullanıma kadar ertelemek için @Lazy ek açıklamasını kullanın — nadiren kullanılan ve oluşturulması maliyetli bean'ler için yararlıdır.

@Service @Lazy
public class HeavyReportService {
    public HeavyReportService() { System.out.println("Created on first use"); }
}

@PostConstruct ve @PreDestroy

Bağımlılık enjeksiyonundan sonra başlatma mantığını çalıştırmak için @PostConstruct kullanın. Bean yok edilmeden önce kaynakları @PreDestroy ile temizleyin.

@Service
public class CacheService {
    @PostConstruct
    public void init() { System.out.println("Cache warming up..."); }
    @PreDestroy
    public void cleanup() { System.out.println("Cache cleared."); }
}

Hızlı Kontrol

@Repository, @Component'e kıyasla hangi ek davranışı sağlar?

Özet

İş mantığı için @Service, DAO için @Repository, yardımcı programlar için @Component, üçüncü taraf türleri için @Bean kullanın. Birden çok bean'i çözümlemek için @Primary/@Qualifier kullanın. Yaşam döngüsü kancaları için @PostConstruct/@PreDestroy kullanın.

Sıkça Sorulan Sorular

“Bean Bağlama: @Component, @Service, @Repository” dersi ücretsiz mi?

Evet — “Bean Bağlama: @Component, @Service, @Repository” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.

“Bean Bağlama: @Component, @Service, @Repository” dersinde ne öğreneceğim?

Stereotip ek açıklamalarını kullanın, @Bean ile bean'ler tanımlayın ve bileşen taramasını anlayın. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Java Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Bean Bağlama: @Component, @Service, @Repository” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Otomatik Yapılandırma ve Spring Boot Başlatıcıları
  2. Uygulama Özellikleri ve Profiller
  3. Bean Bağlama: @Component, @Service, @Repository
  4. Yapıcı Enjeksiyonu ve Döngüsel Bağımlılıklar
← Java Academy Sayfasına Dön