Rumah  >  Artikel  >  Java  >  Bagaimanakah anotasi CDI Java EE digunakan untuk suntikan pergantungan?

Bagaimanakah anotasi CDI Java EE digunakan untuk suntikan pergantungan?

王林
王林asal
2024-05-06 11:36:02957semak imbas

Ya, anotasi CDJ untuk suntikan dependensi dalam Java EE termasuk: @Inject: Inject dependencies. @Menghasilkan: Mengisytiharkan kaedah untuk menghasilkan kebergantungan. @Disposes: Mengisytiharkan kaedah untuk dipanggil apabila kebergantungan dilepaskan. @Dependent: Tentukan skop kacang sebagai skop permintaan. @ApplicationScoped: Menentukan bahawa skop kacang adalah skop aplikasi.

Java EE的CDI注解如何用于依赖注入?

Anotasi CDJ untuk Suntikan Ketergantungan dalam Java EE

Dalam Java Enterprise Edition (Java EE), Dependency Injection (DI) ialah teknik yang memudahkan pembangunan aplikasi. Dengan DI, bukannya membuat dan mengurus tanggungan secara manual, anda boleh mengisytiharkan tanggungan melalui anotasi. Anotasi ini akan dihuraikan secara automatik dan disuntik oleh bekas (seperti pelayan GlassFish).

CDI Anotasi

Di Java EE, spesifikasi Context and Dependency Injection (CDI) menyediakan satu set anotasi untuk DI. Anotasi ini termasuk:

  • @Inject: digunakan untuk menyuntik kebergantungan.
  • @Inject:用于注入一个依赖项。
  • @Produces:用于声明一个方法产生一个依赖项。
  • @Disposes:用于声明一个方法在依赖项不再需要时被调用。
  • @Dependent:用于指定一个 bean 的作用域是请求范围。
  • @ApplicationScoped:用于指定一个 bean 的作用域是应用程序范围。

实战案例

假设我们有一个 UserService 类,它依赖于 UserRepository 接口。使用 CDI,我们可以通过以下方式声明依赖关系:

import javax.inject.Inject;

public class UserService {

    @Inject
    private UserRepository userRepository;

    // ...
}

在上面的代码中,@Inject 注解表明 userRepository 字段应该由容器自动注入。

import javax.enterprise.inject.Produces;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

public class UserRepositoryProducer {

    @PersistenceContext
    private EntityManager em;

    @Produces
    private UserRepository createUserRepository() {
        return new UserJpaRepository(em);
    }
}

在这个示例中,@Produces 注解用于声明 createUserRepository 方法负责产生 UserRepository 的实现,而 @PersistenceContext 注解用于将 EntityManager@Produces: digunakan untuk mengisytiharkan kaedah untuk menjana kebergantungan.

@Disposes: Digunakan untuk mengisytiharkan kaedah yang akan dipanggil apabila kebergantungan tidak lagi diperlukan.

@Dependent: Digunakan untuk menyatakan bahawa skop kacang ialah skop permintaan. @ApplicationScoped: Digunakan untuk menyatakan bahawa skop kacang ialah skop aplikasi.

Kes praktikal

🎜Andaikan kita mempunyai kelas UserService, yang bergantung pada antara muka UserRepository. Menggunakan CDI, kami boleh mengisytiharkan kebergantungan dengan cara berikut: 🎜rrreee🎜 Dalam kod di atas, anotasi @Inject menunjukkan bahawa medan userRepository harus disuntik secara automatik oleh bekas . 🎜rrreee🎜Dalam contoh ini, anotasi @Produces digunakan untuk mengisytiharkan bahawa kaedah createUserRepository bertanggungjawab untuk menghasilkan pelaksanaan UserRepository, manakala anotasi @PersistenceContext digunakan untuk menyuntik <code>EntityManager ke dalam kaedah. 🎜🎜🎜Kesimpulan🎜🎜🎜Anotasi CDI menyediakan cara yang mudah dan cekap untuk melaksanakan suntikan pergantungan. Dengan menggunakan anotasi ini, anda boleh mengurangkan kod boilerplate dan menjadikan aplikasi anda lebih modular dan boleh diselenggara. 🎜

Atas ialah kandungan terperinci Bagaimanakah anotasi CDI Java EE digunakan untuk suntikan pergantungan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn