2010-02-23 26 views
6

Vào mùa xuân, có thể khởi tạo bất kỳ lớp nào bằng cách xác định bean tương ứng trong xml conf. Nó cũng có thể tạo ra nhiều hơn một bean cho cùng một lớp với các tham số khác nhau .....làm thế nào để nhanh chóng nhiều hơn sau đó một đĩa CDI/Weld đậu cho một lớp học?

Các tính năng này trong CDI, có thể tạo ra các thể hiện khác nhau của cùng một lớp với khởi tạo khác nhau thông số?

Bạn cũng có thể tạo bean mà không thay đổi lớp .... Ý tôi là không thêm chú thích?

ADDED

Hãy để tôi làm ví dụ.

<bean id="someBean1" class="org.mm.MyBean"> 
    <property name="x" value="xx"/> 
    <property name="y" value="yy"/> 
    <property name="z" value="zz"/>  
</bean> 
<bean id="someBean2" class="org.mm.MyBean"> 
    <property name="x" value="other value"/> 
    <property name="y" value="yy2"/> 
    <property name="z" value="zz2"/>  
</bean> 

Làm cách nào có thể khởi tạo hai trường hợp của cùng một lớp và khởi tạo chúng với các giá trị trường khác nhau?

Trả lời

4

Hai tùy chọn như xa như tôi có thể thấy:

  • Nếu không có kiến ​​thức hơn nữa usecase của bạn, tôi giả sử rằng bạn có muốn cung cấp một số thực hiện thay thế cho (mock-) thử nghiệm hoặc cấu hình các vấn đề (chẳng hạn khác PaymentProvider cho một OrderService). Điều này được hỗ trợ bởi thông số kỹ thuật, hãy xem @Alternativehere (và không lặp lại sai lầm ban đầu của tôi và quên kích hoạt các lựa chọn thay thế trong beans.xml)

  • Để có cấu hình XML kiểu Spring, bạn có thể sử dụng Seam 3 Config, cung cấp cấu hình XML như mô tả. BTW, đây là một phần của JSR 299, nhưng đã bị loại khỏi spec vì bất cứ lý do gì.

+0

Đã trả lời trong năm 2011. Trạng thái hiện tại với EE7 là gì? – banterCZ

+0

Tôi không biết. Có thể bắt đầu một câu hỏi mới? –

+0

Ở đây có câu hỏi http://stackoverflow.com/questions/25153624/how-to-instantiate-more-cdi-beans-for-one-class – banterCZ

2

có một số cách để thực hiện điều đó.

Ví dụ: sử dụng @New

riêng tư @Inject @New YourBean yb; riêng tư @Inject @New YourBean yb2;

Điều này buộc hộp chứa phải tạo một phiên bản mới, bất kể phạm vi ban đầu của hạt.

Một cách khác sẽ chỉ đơn giản là xác định YourBean là @Dependent scoped (đó là btw (hiện tại) mặc định nếu một lớp không được chú thích ở tất cả).

+0

và nội dung về ?? họ sẽ được tiêm? – smikesh

2

Bạn có thể dễ dàng sử dụng phương pháp sản xuất và nếu bạn có nhiều trường hợp phải được tạo bằng phương pháp sử dụng vòng loại CDI để phân biệt các loại cá thể khác nhau.

Ngoài ra, bạn có thể sử dụng Seam Config để thực hiện theo cách đó nhưng tôi nghĩ phương pháp sản xuất là cách thanh lịch hơn để thực hiện việc này. tùy thuộc vào trường hợp sử dụng của bạn có một tùy chọn khác là @Alternative.

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