2012-03-27 43 views
37

Tôi đã cố gắng để tạo ra Hibernate Validator đậu, và chạy vào vấn đề này tạo ra một bean từ phương pháp nhà máy tĩnh trong lớp khác. Tôi tìm thấy một cách Spring để có được Validator bean của tôi khởi tạo (giải pháp ở phía dưới), nhưng vấn đề chính nó vẫn chưa được giải quyết. Trình xác thực được sử dụng làm trường hợp mẫu ở đây.Khởi tạo bean mùa xuân từ phương thức tĩnh từ một lớp khác?

Đây là cách tôi tạo ra các ví dụ Validator trong Java

import javax.validation.Validation; 
import javax.validation.Validator; 
import javax.validation.ValidatorFactory; 

ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); 
Validator validator = factory.getValidator(); 

Đây là cách tôi đã cố gắng để tạo ra các hạt trong applicationContext.xml

<bean id="validatorFactory" 
    class="javax.validation.ValidatorFactory" 
    factory-method="javax.validation.Validation.buildDefaultValidatorFactory" /> 

<bean id="validator" 
    class="javax.validation.Validator" 
    factory-bean="validatorFactory" 
    factory-method="getValidator" /> 

Những gì tôi hiểu là trong "factory- phương thức "bạn chỉ có thể truy cập các phương thức tĩnh được định nghĩa trong lớp được định nghĩa trong tham số" lớp ". Kể từ khi buildDefaultValidatorFactory() phương pháp là tĩnh tôi không thể tạo ra một thể hiện của Validation và cung cấp cho nó là "nhà máy-đậu" cho validatorFactory như thế này:

<bean id="validation" class="javax.validation.Validation" /> 

<bean id="validatorFactory" 
    class="javax.validation.ValidatorFactory" 
    factory-bean="validation" 
    factory-method="buildDefaultValidatorFactory" /> 

này kết thúc lên bị lỗi nhắn

" Kiểm tra xem một phương thức với tên cụ thể tồn tại và nó là không tĩnh "

Câu hỏi là làm thế nào bạn sẽ tạo ra đậu bằng hiện vật này về một tình huống trong mùa xuân?

Đây là cách tôi giải quyết vấn đề Validator:

<bean id="validator" 
    class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/> 

Trả lời

46

Các factory-method chỉ nên chứa tên phương pháp, không bao gồm tên lớp.

Nếu bạn muốn sử dụng nhà máy tĩnh, hãy cung cấp class của nhà máy (!) Cho khai báo bean, nếu bạn muốn sử dụng nhà máy mẫu, hãy cung cấp factory-bean cho khai báo bean, nhưng không cung cấp cả hai : Lớp bean đã tạo không được đưa ra trong khai báo bean.

Vì vậy, một ví dụ đầy đủ nên trông như thế này, sử dụng một nhà máy tĩnh cho validatorFactory và một nhà máy dụ cho validator:

<bean id="validatorFactory" 
    class="javax.validation.Validation" 
    factory-method="buildDefaultValidatorFactory" /> 

<bean id="validator" 
    factory-bean="validatorFactory" 
    factory-method="getValidator" /> 

Xem chi tiết về tài liệu:

http://static.springsource.org/spring/docs/2.0.x/reference/beans.html#beans-factory-class-static-factory-method

Để trả lời bạn có câu hỏi - Làm thế nào bạn sẽ tạo ra đậu trong loại tình huống này trong mùa xuân? - Thực hiện chính xác như được hiển thị ở đây hoặc nếu bạn có thể, hãy sử dụng lớp tiện ích như LocalValidatorFactoryBean, đơn giản hóa cấu hình Spring.

+0

Tên lớp học ở đó để minh họa những gì tôi muốn làm. Như tôi đã nói "Điều tôi hiểu là trong" phương pháp nhà máy ", bạn chỉ có thể truy cập các phương thức tĩnh được định nghĩa trong Lớp được định nghĩa trong tham số" lớp "." – Spaideri

+0

Điều đó là đúng - nếu bạn đưa ra tham số 'lớp', phương thức factory phải là một phương thức tĩnh của lớp đó, như đã thấy trong việc tạo' validatorFactory'. –

0

Bạn đã thử cái này chưa?

<bean id="validatorFactory" 
class="javax.validation.Validation" 
factory-method="buildDefaultValidatorFactory" /> 

<bean id="validator" 
class="javax.validation.Validator" 
factory-bean="validatorFactory" 
factory-method="getValidator" /> 
+2

Xin chào!phương thức buildDefaultValidatorFactory là một phương thức tĩnh của lớp javax.validation.Validation – Spaideri

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