我正在使用Spring和Spring MVC構建應用程序。對於我來說,使用@Autowired不是一個選項(是一項要求)。未使用@Autowire的Spring + Spring MVC依賴注入
我建立一個像web.xml文件:
<!-- Spring context -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Spring MVC -->
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>namespace</param-name>
<param-value>mvc-dispatcher-context</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
所以我加載Spring上下文和Spring MVC的Servlet。
我的MVC-調度-context.xml文件看起來像:
<beans ...>
<mvc:annotation-driven />
<context:component-scan base-package="com.pacage.controller"/>
<mvc:resources mapping="/resources/**" location="/WEB-INF/static/" />
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/pages/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
</beans>
所以我可以在我的控制器使用註解@Controller ...
而且在我的applicationContext.xml我有我的春天豆類定義,比如我在這種情況下,服務「OneService.java」
我有一個控制器:
@Controller
@RequestMapping("/main")
public class MainController {
private OneService oneService;
//getters and setters
...
}
我想要在applicationContext.xml文件中定義注入OneService的位置。 我嘗試了幾種方法,但我無法得到它的工作,總是在控制器內使用我的服務時得到一個NullPointerException。
有沒有什麼方法可以使用此mvc servlet中的applicationContext.xml中定義的bean?
謝謝你們所有的時間!
[更新]
如果我定義我的servlet裏面我所有的applicatonContext我不能讓它工作。有沒有什麼辦法讓servlet上下文成爲應用程序連接的子節點,只是爲了能夠使用應用程序上下文bean?
感謝
「是要求」嗎?如果您使用的是@ @ Controller,那麼您已經使用了特定於Spring的註釋,但是@ @ Inject'當然是一個可以接受的選擇。 – chrylis 2014-10-08 14:41:44
我可以不使用註釋來做到這一點嗎? – 2014-10-08 14:45:18
理論上是的,但你也可以用C編寫應用程序。註釋是Web開發中的最佳實踐,並且有很好的理由。 – chrylis 2014-10-08 14:49:36