2013-12-12 22 views
10

Tôi muốn sử dụng tính năng tiêm phụ thuộc trong một ứng dụng độc lập Java 7 lớn, nhưng tôi không thực sự chắc chắn bắt đầu từ đâu.Tiêm phụ thuộc vào ứng dụng độc lập Java 7

Tôi đã viết một ứng dụng thử nghiệm nhỏ:

public class Main { 

    @Inject 
    MyInterface myInterface; 

    public static void main(String[] args) { 

     Main m = new Main(); 
     System.out.println(m.myInterface.getMessage()); 

    } 

} 

với một giao diện:

public interface MyInterface { 

    String getMessage(); 

} 

và thực hiện một giao diện:

@Singleton 
public class MyInterfaceImpl implements MyInterface { 

    public String getMessage() { 
     return "Hello World!"; 
    } 

} 

Các pom.xml chứa một sự phụ thuộc:

<dependencies> 
    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-api</artifactId> 
     <version>7.0</version> 
     <scope>provided</scope> 
    </dependency> 
</dependencies> 

Ứng dụng này biên dịch, nhưng tất nhiên, nó treo với NPE khi cố gắng in thư. Việc tiêm đã không xảy ra.

Vì vậy, câu hỏi của tôi là:

  1. thể Dependency Injection thể đạt được trong một ứng dụng độc lập Java 7?
  2. Tôi phải bao gồm những phụ thuộc nào khác để làm cho nó phụ thuộc?
  3. Có ai có ví dụ hoạt động đơn giản để chia sẻ (tôi không thể tìm thấy bất kỳ) nào không?
+0

Định nghĩa của bạn về một ứng dụng độc lập là gì? –

+0

Nó không cần một máy chủ web/container để chạy ... Java SE ... – JVerstry

Trả lời

12

Không chỉ có một cách để sử dụng tiêm phụ thuộc với Java.

(1) Ví dụ: bạn có thể sử dụng CDI chuẩn, nơi triển khai tham chiếu là Weld. Có tài liệu về using Weld in a Java SE environment, điều có thể là ý của bạn là ứng dụng độc lập.

Bạn cũng có thể sử dụng Spring Framework, cũng hỗ trợ chú thích CDI chung (ví dụ: @Inject). Trong trường hợp này, bạn thường sẽ tạo ra một ClasspathXmlApplicationContext khi khởi động chương trình và để Spring quản lý (tạo/hủy) tất cả các bean bạn cần.

(2) Bạn phụ thuộc hiện tại chỉ nhập API của Java EE. Vì vậy, tôi không ngạc nhiên nếu bạn nhận được NullPointerException khi thực hiện. Bạn cần phải thêm một cài đặt (như Weld) hoặc sử dụng Spring.

(3) Xem các liên kết ở trên.

Ngoài ra, hãy xem Differences between Java EE 6 CDI Implementations để tham khảo về các triển khai sẵn có khác của CDI Java.

+0

Hàn, không bao giờ nghe nói về nó. Đọc tài liệu, trông tuyệt vời ... – JVerstry

Các vấn đề liên quan