2009-10-21 39 views
29

Có cách nào để đặt thuộc tính vào mùa xuân, không phải là một thể hiện của một lớp, mà là chính đối tượng lớp? tức làCú pháp Spring để thiết lập một đối tượng Class?

Thay vì

<bean> 
    <property name="prototype" class="a.b.c.Foo">... 

đem lại cho bạn một thể hiện của "Foo", một cái gì đó như:

<bean> 
    <property name="prototype" class="java.lang.Class" value="a.b.c.Foo.class"... 

chỉnh sửa: tốt nhất (làm việc) giải pháp cho đến nay - sử dụng instantiation bình thường và lấy được lớp trong setter. Về các giải pháp Tôi nghĩ rằng đây chúng tôi mô tả này là "gian lận":

<bean class="Bar"> 
    <property name="prototype" class="a.b.c.Foo">... 


public class Bar{ 
     public void setPrototype(Object o){ 
       this.prototypeClass=o.getClass(); 

chỉnh sửa: Phương pháp dtsazza của các công trình là tốt.

chỉnh sửa: phương pháp của bộ vi phạm cũng hoạt động.

Trả lời

37
<bean> 
    <property name="x"> 
     <value type="java.lang.Class">a.b.c.Foo</value> 
    </property> 
</bean> 

Điều đó sẽ hiệu quả.

0

Không. Với thẻ bean, bạn hướng dẫn Spring cách khởi tạo lớp.

0

Liệu < tên thuộc tính = "x" class = "a.b.c.Foo.class" > có hoạt động không? Đó phải là một thể hiện của một đối tượng Class ...

+1

không, điều đó sẽ cung cấp cho bạn ClassNotFound, vì không có điều gì như lớp Foo.class được xác định. –

11

Bạn chắc chắn có thể sử dụng static factory method Class.forName(), nếu không có cú pháp tao nhã hơn (và tôi không tin rằng có):

<property name="x"> 
    <bean class="java.lang.Class" factory-method="forName"> 
     <constructor-arg value="a.b.c.Foo"/> 
    </bean> 
</property> 
+0

Tôi upvoted này, bởi vì nó có vẻ giống như một gợi ý tốt. Thật kỳ lạ, mặc dù, mùa xuân đang phàn nàn với một "ClassNotFoundException" cho java.lang.Class. –

+0

Đừng bận tâm, ngoại lệ đó là do cấu hình sai :) Hoạt động tốt. –

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