2011-11-25 16 views
8

मुझे नहीं पता कि एक साधारण गाइड उदाहरण के साथ कैसे आगे बढ़ना है। प्रलेखन निम्नलिखित मेरे द्वारा की गई पढ़ने के बाद:गिइस सर्वलेट्स के साथ सरल उदाहरण

  • सेटअप guiceFilter
  • एक इंजेक्टर बनाया है और एक GuiceServletContextListener में एक नया ServletModule instantiated और web.xml को
  • कॉन्फ़िगर सर्वलेट्स में serve("*.jsp").with(IndexController.class); बाध्य श्रोता जोड़ा

ऐसा करने के बाद मैं निर्भरता इंजेक्शन का उपयोग कैसे करूं? मान लें कि मेरे पास index.jsp, IndexController.class (सर्वलेट) है, और ऑर्डर के आधार पर व्यक्ति के साथ व्यक्ति और आदेश नामक दो वर्ग हैं। मैं गाइड के माध्यम से व्यक्ति कन्स्ट्रक्टर में ऑर्डर निर्भरता कैसे लगा सकता हूं और ऐसा करने के बाद मुझे इस व्यक्ति के आदेशों की सूची नियंत्रक को वापस लौटने की आवश्यकता होगी? मैंने अतीत में एएसपी.नेट एमवीसी के साथ निनजेक्ट का उपयोग किया है और यह बहुत आसान था, लेकिन मैं गुइस के साथ सबसे सरल डी उदाहरण को कार्यान्वित करने के तरीके पर बहुत उलझन में हूं। धन्यवाद।

उत्तर

20

प्रारंभ करने के लिए, यहां एक उदाहरण है जो एक इंडेक्स नियंत्रक में नामों की सूची लौटने वाली सेवा को इंजेक्ट करता है। (इस उदाहरण में कोई चालबाजी नहीं है, सबकुछ स्पष्ट है।)

ListService इंटरफ़ेस सरल सेवा को परिभाषित करता है।

public interface ListService { 
    List<String> names(); 
} 

DummyListService तुच्छ कार्यान्वयन प्रदान करता है।

public class DummyListService implements ListService { 
    public List<String> names() { 
     return Arrays.asList("Dave", "Jimmy", "Nick"); 
    } 
} 

ListModule तारों ListService डमी कार्यान्वयन के लिए।

public class ListModule extends AbstractModule { 
    @Override 
    protected void configure() { 
     bind(ListService.class).to(DummyListService.class); 
    } 
} 

GuiceServletContextListener कार्यान्वयन सूचकांक करने के लिए एक सर्वलेट नक्शे, और जैसा कि ऊपर एक ListModule पैदा करता है।

@Override 
protected Injector getInjector() { 
    return Guice.createInjector(
      new ServletModule() { 
       @Override protected void configureServlets() { 
        serve("/index.html").with(IndexController.class); 
       } 
      }, 
      new ListModule()); 
} 

IndexController अनुरोध गुंजाइश (स्वयं) में और आगे एक JSP पृष्ठ पर नाम डालता है।

@Singleton 
public class IndexController extends HttpServlet { 

    @Inject ListService listService; 

    @Override 
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
     req.setAttribute("names", listService.names()); 
     req.getRequestDispatcher("/WEB-INF/jsp/index.jsp").forward(req, resp); 
    } 

} 

JSP पेज नाम उदासीनता (टुकड़ा केवल)।

<c:forEach items="${names}" var="name"> 
    ${name}<br/> 
</c:forEach> 
+0

@ इस अविश्वसनीय उदाहरण के लिए डेव धन्यवाद। एक प्रश्न ... क्या सूची मॉड्यूल ServletModule का विस्तार करना चाहिए या यह आवश्यक नहीं है? – Robert

+1

@ रॉबर्ट नोप; यह सर्वलेट मॉड्यूल नहीं है। [सर्वलेट मॉड्यूल] (http://google-guice.googlecode.com/svn/tags/3.0/javadoc/com/google/inject/servlet/ServletModule.html) अनुरोध हैंडलर, AFAICT को कॉन्फ़िगर करने के लिए स्पष्ट रूप से हैं। इसके अलावा आप एक ही काम करने के लिए 'ServletModule.configure() 'का उपयोग नहीं कर सकते हैं, क्योंकि यह' अंतिम 'विधि है। –

+0

@ डेव आह ... मैं पूरी तरह से याद किया। सहायता के लिए धन्यवाद। बहुत ज्यादा अधिमूल्यित। – Robert

संबंधित मुद्दे