2012-05-11 8 views
9

Làm thế nào để tiêm một đối tượng vào một servlet?Làm thế nào để sử dụng tiêm phụ thuộc trong servlet?

Ý tôi là, tôi không thể sử dụng hàm tạo DI vì các servlet được khởi tạo bởi một thùng chứa servlet.
Và tôi cũng không thấy một cách hay để triển khai DI dựa trên setter cho một servlet.

Tôi có nên sử dụng bộ nghe servlet không? Có bất kỳ thực hành tốt nhất nào không?

P.S. Tôi không có cả Spring lẫn Guice lẫn bất kỳ framework DI nào khác, tôi quan tâm đến việc tiêm phụ thuộc thủ công.

+2

Nhìn vào câu hỏi này. Có lẽ nó sẽ giúp: http://stackoverflow.com/q/1992132/891391 – yatul

Trả lời

0

Bạn có thể tiêu thụ các dịch vụ do mình chọn tạo/quản lý bởi một số IOC container (Spring, Guice)

Bạn có thể tạo ra một thực hiện ContextAware và Kéo ra đậu như và khi cần thiết từ Servlet

16

Điều này có thể dưới Servlet 3.0. Bạn đăng ký ServletContextListener đăng ký chương trình Servlet theo chương trình với phương thức ServletContext addServlet(String, Servlet) ngay trước khi ứng dụng bắt đầu. Vì bạn đang tự khởi tạo các cá thể Servlet, bạn có thể cung cấp cho chúng các trình xây dựng thích hợp và các phụ thuộc tiêm.

Tôi đã tạo an example một thời gian trước đây minh họa kỹ thuật cơ bản.

+1

+1 Tôi không biết về 'addServlet' – ewernli

+0

@ewernli: IMO, Sun/Oracle đã không cho nó công khai nó xứng đáng. –

+0

Cảm ơn bạn đời, rất hữu ích – 7zark7

0

Bạn có thể sử dụng JNDI, Giao diện đặt tên và thư mục Java và @Resource để tiêm.