2009-07-29 41 views
32

Cách dễ nhất để lấy một id bean từ bên trong bean đó (trong mã Java) mà không sử dụng một BeanPostProcessor để thiết lập một trường là gì?Làm cách nào để lấy id của bean từ bên trong bean trong Spring?

Cách duy nhất tôi có thể nghĩ đến là một cái gì đó như thế này sử dụng một BeanPostProcessor:

public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { 
    ((MyBean)bean).setName(beanName); 
    return bean; 
} 

Có cách nào tốt hơn mà không yêu cầu tôi viết một lớp thêm hoặc biết lớp của bean trong câu hỏi? Tôi đã thử tìm kiếm thông qua các tài liệu và trên Google, nhưng tôi không thực sự chắc chắn những gì tôi cần phải tìm kiếm.

Cảm ơn!

Trả lời

46

Chỉ cần triển khai giao diện org.springframework.beans.factory.BeanNameAware và bạn sẽ tự động nhận được giao diện đó. Nó có một phương pháp:

void setBeanName(String name) 
+0

Cảm ơn bạn! Chính xác những gì tôi đang tìm kiếm. – Dan

+3

Thật đáng tiếc khi Spring không cung cấp chú thích cho điều này, có thể lấy tên được tiêm trực tiếp vào trường của bean mà không cần giao diện và bộ công khai. Hah tốt. – skaffman

+0

@skaffman - bạn luôn gây ấn tượng với kiến ​​thức dễ dàng của bạn về Mùa xuân. Tôi tìm ra câu trả lời của bạn. – duffymo

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