0Pricing
Java Academy · Pelajaran

Penyambungan Bean: @Component, @Service, @Repository

Gunakan anotasi stereotipe, tentukan bean dengan @Bean, dan pahami pemindaian komponen.

Penyambungan Bean: @Component, @Service, @Repository adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.

Anotasi Stereotipe

Spring menyediakan anotasi stereotipe yang menandai kelas sebagai komponen yang dikelola Spring dan menyampaikan perannya: @Component (umum), @Service (logika bisnis), @Repository (akses data), @Controller/@RestController (lapisan web).

@Component: Komponen Umum

Kelas apa pun yang diberi anotasi @Component akan terdeteksi selama pemindaian komponen dan didaftarkan sebagai komponen Spring. Anotasi ini menjadi dasar bagi semua stereotipe lainnya.

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

@Service: Lapisan Logika Bisnis

@Service adalah spesialisasi dari @Component yang secara semantik menunjukkan kelas layanan. Spring memperlakukannya sama seperti @Component, tetapi anotasi ini menyampaikan maksud dan dapat digunakan oleh penasihat 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: Lapisan Akses Data

@Repository menandai kelas DAO. Spring menambahkan penerjemahan pengecualian persistensi otomatis: SQLException dan pengecualian khusus vendor dibungkus dalam hierarki DataAccessException milik 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 dalam Kelas @Configuration

Gunakan @Bean pada metode di dalam kelas @Configuration untuk mendaftarkan komponen secara manual — berguna untuk kelas pihak ketiga yang tidak dapat Anda beri anotasi.

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

Pemindaian Komponen

@SpringBootApplication memicu pemindaian komponen mulai dari paket aplikasi hingga ke bawahnya. Kelas dalam subpaket ditemukan secara otomatis. Gunakan @ComponentScan(basePackages=...) untuk menyesuaikannya.

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

Penamaan Komponen

Secara bawaan, nama komponen adalah nama kelas dengan huruf awal diubah menjadi huruf kecil (OrderService → orderService). Tentukan nama khusus: @Service("orders") atau @Bean("myMapper").

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

Cakupan Komponen

Cakupan bawaan adalah singleton (satu instans per konteks Spring). Cakupan lainnya: prototype (instans baru untuk setiap injeksi), request, session (khusus web).

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

@Primary dan @Qualifier untuk Mengatasi Ambiguitas

Jika beberapa komponen mengimplementasikan antarmuka yang sama, gunakan @Primary untuk menandai komponen bawaan, atau gunakan @Qualifier("name") pada titik injeksi untuk memilih komponen tertentu.

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

Inisialisasi Tertunda

Secara bawaan, komponen singleton dibuat saat aplikasi dimulai. Beri anotasi @Lazy untuk menunda pembuatannya hingga pertama kali digunakan — berguna untuk komponen mahal yang jarang digunakan.

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

@PostConstruct dan @PreDestroy

Jalankan logika inisialisasi setelah injeksi dependensi dengan @PostConstruct. Bersihkan sumber daya sebelum komponen dihancurkan dengan @PreDestroy.

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

Pemeriksaan Singkat

Perilaku tambahan apa yang ditambahkan @Repository dibandingkan @Component?

Ringkasan

Gunakan @Service untuk logika bisnis, @Repository untuk DAO, @Component untuk utilitas, dan @Bean untuk tipe pihak ketiga. @Primary/@Qualifier menyelesaikan ambiguitas pada beberapa komponen. Gunakan @PostConstruct/@PreDestroy untuk kait siklus hidup.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Penyambungan Bean: @Component, @Service, @Repository” gratis?

Ya — teks lengkap “Penyambungan Bean: @Component, @Service, @Repository” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Penyambungan Bean: @Component, @Service, @Repository”?

Gunakan anotasi stereotipe, tentukan bean dengan @Bean, dan pahami pemindaian komponen. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Java Academy?

Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Penyambungan Bean: @Component, @Service, @Repository” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?

Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Konfigurasi Otomatis dan Starter Spring Boot
  2. Properti Aplikasi dan Profil
  3. Penyambungan Bean: @Component, @Service, @Repository
  4. Injeksi Konstruktor dan Dependensi Sirkular
← Kembali ke Java Academy