2016-04-13 99 views
0

Spring MVC çerçevesine dayalı bir web uygulamasında DI'nin nasıl yapıldığını anlamaya çalışıyorum.Bahar MVC web uygulamasında Bağımlılık Enjeksiyonu

Bunun için web.xml'u değiştirdim. kontrol sınıfı aşağıdaki

<beans xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans"> 

    <bean id="HandlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> 

    <bean name="/welcome.html" class="com.example.hellocontroller.HelloController"/> 

    <bean id="simpleUtil" class="com.example.util.SimpleUtil"/> ----->(1) 

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix"> 
      <value>/WEB-INF/</value> 
     </property> 

     <property name="suffix"> 
      <value>.jsp</value> 
     </property> 
    </bean> 
</beans> 

edilir: Yay memuru-servlet.xml olarak

public class HelloController extends AbstractController { 

    @Autowired 
    private SimpleUtil simpleUtil; -------> (2) 

    @Override 
    protected ModelAndView handleRequestInternal(HttpServletRequest request, 
    HttpServletResponse response) throws Exception { 

     System.out.println("calling the method add(a,b) "); 

     simpleUtil.add(2, 3); 

     ModelAndView modelandview = new ModelAndView("HelloPage"); 
     modelandview.addObject("welcomeMessage", "first Spring MVC Application"); 
     return modelandview; 
    } 
} 

<web-app ...> 

    <servlet> 
     <servlet-name>spring-dispatcher</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>spring-dispatcher</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 
</web-app> 

Sonra, yay memuru-servlet.xml oluşturulan Çeşitli fasulyeleri tanımlamaktayım, özellikle (1) -><bean name="simpleUtil" class="com.example.util.SimpleUtil"/>

Şimdi, kontrolörün I (2) listelenen bu fasulye Bahar framework tarafından enjekte istiyorum:

@Autowired 
    private SimpleUtil simpleUtil; 

Ben Bahar bağımlılık enjekte etmedi yani NullPointerException alıyorum bu programı çalıştırmak

.

Burada yanlış bir şey mi yapıyorum? Bu iş nasıl yapılır?

Burada birkaç ilgili soru var:

Q1) spring-dispatcher-servlet.xml fasulye tanım yapılandırma dosyası olarak hizmet ediyor mu? Eğer değilse, o zaman ilkbahar tarafından yönetilmek istediğim fasülye tanımlama dosyalarını nereden temin ederim?

S2) Spring MVC'nin ön denetleyicisi, Handling Mapping öğesinin hangi üretici kimliğinin ne olduğunu nereden biliyor? (Bizim durumumuzda verilen kimlik "HandlingMapping" dir).

cevap

1

evet spring-dispatcher-servlet.xml Burada yay memuru-servlet.xml içinde dinleyicisi eklemeniz gerekir bunun için fasulye tanım yapılandırma dosyası olarak hizmet u uygulama config şimdi ur spring-dispatcher-servlet.xml

<context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>classpath:spring/application-config.xml</param-value> 
    </context-param> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

eklemeniz gerekir koddur .xml, denetleyici yapılandırması için DI 'u yapabilir. Tam örnek için bir tane daha xml dosyası ekleyebilmemiz gerekir.