我创建了一个spring-config.xml文件。在该文件中,我已经为服务类和DAO类创建了所有bean。现在我想在我的Spring控制器中调用bean。我已经知道的方法是
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
SeviceClassName objService = (SeviceClassName) context.getBean("BeanName");
但问题是我把文件放在WEB-INF文件夹中。 解决我用过的问题
ApplicationContext context = new FileSystemXmlApplicationContext("C:/Users/xyz/Desktop/HelloWeb/WebContent/WEB-INF/spring-config.xml");
它工作正常。 但它似乎不是一个好习惯。 然后我尝试通过spring-config.xml初始化DispatcherServlet。
<servlet>
<servlet-name>HelloWeb</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
但我不知道如何在控制器中调用bean。
我试着在我的弹簧控制器中使用@Autowired。但它不起作用。
每当我尝试这个(@Autowired)并尝试在eclipse中执行相同应用程序的jsp文件时,它会显示所请求的资源不可用&#34;。
任何人都可以建议我如何解决问题
或
任何人都可以建议我一个更好的方法,我可以调用我在spring-config.xml中创建的服务类bean
要么
在spring controller中调用服务类方法的任何其他方法。
我正在使用spring 3.0。 我在Eclipse中创建了一个Dynamic Web Project。在我的WEB-INF文件夹中,我放了4个xml文件 --web.xml,spring-config.xml,HelloWeb-servlet.xml。 我的HelloWeb-servlet包含
<mvc:annotation-driven />
<context:annotation-config />
<context:component-scan base-package="com.tutorialspoint" />
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="mediaTypes">
<map>
<entry key="html" value="text/html"/>
<entry key="json" value="application/json"/>
</map>
</property>
</bean>
<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jacksonMessageConverter"/>
</list>
</property>
</bean>
我的spring-config包含所有bean配置。在spring控制器中,我只是调用服务类,该服务方法是在我已经在spring-config.xml中创建bean的服务类中编写的。
答案 0 :(得分:0)
检查Stackoverflow answer。它可能是一个比你想要的更详细的答案,但它肯定会帮助你完成基础知识。
本质上,是通过Spring上下文加载器侦听器建立的根上下文,以及通过相应的servlet参数建立的servlet上下文。两者的param名称都是contextConfigLocation
(前者是监听器上下文参数,后者是servlet init-param)。
@Autowired
或@Inject
可用于在控制器中注入服务bean。确保使用@Service
或@Resource
注释服务bean,以便在组件扫描期间拾取bean。