Tôi nghĩ rằng tôi đã hiểu CDI hoạt động như thế nào và để lặn sâu vào nó, tôi muốn thử sử dụng nó với một ví dụ thế giới thực. Tôi bị mắc kẹt với một điều mà tôi cần sự giúp đỡ của bạn để làm cho tôi hiểu. Tôi thực sự đánh giá cao sự giúp đỡ của bạn về vấn đề này.Phương pháp CDI @Producer có thể lấy thông số tùy chỉnh không?
Tôi có khung công việc riêng được phát triển bằng cách sử dụng API phản chiếu Java và cấu hình XML, dựa trên loại "nguồn" và "eventName" cụ thể mà tôi tải lớp Mô-đun thích hợp và gọi phương thức "xử lý" trên đó. Mọi thứ đều hoạt động tốt trong dự án của chúng tôi.
tôi đã hào hứng với tính năng CDI và muốn để cho nó thử với khuôn khổ công việc mà tôi đang lên kế hoạch tiêm lớp Mô-đun thay vì tải chúng bằng cách sử Reflection vv ...
Chỉ cần để cung cấp cho bạn một ý tưởng, tôi sẽ cố gắng để giữ mọi thứ đơn giản ở đây.
"Message.java" là một loại đối tượng chuyển chứa "Nguồn" và "eventName", để chúng tôi có thể tải mô-đun phù hợp.
public class Message{
private String source;
private String eventName;
}
cấu hình mô-đun như sau
<modules>
<module>
<source>A</source>
<eventName>validate</eventName>
<moduleClass>ValidatorModule</moduleClass>
</module>
<module>
<source>B</source>
<eventName>generate</eventName>
<moduleClass>GeneratorModule</moduleClass>
</module>
</modules>
ModuleLoader.java
public class ModuleLoader {
public void loadAndProcess(Message message){
String source=message.getSource();
String eventName=message.getEventName();
//Load Module based on above values.
}
}
Câu hỏi
Bây giờ, nếu tôi muốn thực hiện cùng qua CDI để tiêm cho tôi một Module (trong lớp ModuleLoader), tôi có thể viết lớp Nhà máy bằng phương pháp @Produce, có thể làm điều đó. NHƯNG câu hỏi của tôi là,
a) cách có thể chuyển đối tượng thư đến phương pháp @Produce để tra cứu dựa trên eventName và nguồn?
Bạn có thể vui lòng cung cấp cho tôi đề xuất không?
Xin cảm ơn trước.
Xin lưu ý rằng mẹo InjectionPoint chỉ hoạt động nếu bạn @Sản xuất một bean phụ thuộc phạm vi. Đối với đậu bình thường (SessionScoped, ApplicationScoped, RequestScoped, vv) nó sẽ _not_ làm việc khi bạn có nhiều điểm tiêm và không chỉ là một điểm duy nhất. – struberg