SpringMobile中的Bean创建异常
我在使用时遇到以下异常 嵌套异常是SpringMobile中的Bean创建异常,spring,spring-mobile,Spring,Spring Mobile,我在使用时遇到以下异常 嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化bean类[org.springframework.mobile.device.device]:指定的类是接口]的根本原因 我的控制器如下: package com.srccodes.spring.controller; import java.util.logging.Logger; import org.springframework.mo
org.springframework.beans.BeanInstantiationException:无法实例化bean类[org.springframework.mobile.device.device]:指定的类是接口]
的根本原因
我的控制器如下:
package com.srccodes.spring.controller;
import java.util.logging.Logger;
import org.springframework.mobile.device.Device;
import org.springframework.mobile.device.site.SitePreference;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @author Abhijit Ghosh
* @version 1.0
*/
@Controller
public class SpringMobileHelloController {
private static final Logger logger = Logger.getLogger(SpringMobileHelloController.class.getName());
@RequestMapping("/")
public String sayHello(SitePreference sitePreference, Device device, Model model) {
logger.info("SitePreference : " + sitePreference);
logger.info("Device : " + device);
model.addAttribute("message", "Hello World!");
return "helloWorld";
}
}
My dispatcher-servlet.xml is:
(some parts omitted)
<context:component-scan base-package="com.srccodes.spring.controller" />
<mvc:annotation-driven>
<mvc:argument-resolvers>
<bean class="org.springframework.mobile.device.site.SitePreferenceWebArgumentResolver" />
<bean class="org.springframework.mobile.device.DeviceWebArgumentResolver" />
</mvc:argument-resolvers>
</mvc:annotation-driven>
<mvc:interceptors>
<!-- Resolve the device which has generated the request -->
<bean class="org.springframework.mobile.device.DeviceResolverHandlerInterceptor" />
<!-- User's site preference -->
<bean class="org.springframework.mobile.device.site.SitePreferenceHandlerInterceptor" />
<!-- Redirects users to the device specific site -->
<bean class="org.springframework.mobile.device.switcher.SiteSwitcherHandlerInterceptor" factory-method="urlPath">
<constructor-arg value="/m" />
<constructor-arg value="/t" />
<constructor-arg value="/SpringMobileHelloWorld" />
</bean>
</mvc:interceptors>
<!-- Device aware view resolving -->
<bean id="liteDeviceDelegatingViewResolver" class="org.springframework.mobile.device.view.LiteDeviceDelegatingViewResolver">
<constructor-arg>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/" />
<property name="suffix" value=".jsp" />
</bean>
</constructor-arg>
<property name="mobilePrefix" value="m/" />
<property name="tabletPrefix" value="t/" />
<property name="enableFallback" value="true" />
</bean>
</beans>
package com.srccodes.spring.controller;
导入java.util.logging.Logger;
导入org.springframework.mobile.device.device;
导入org.springframework.mobile.device.site.SitePreference;
导入org.springframework.stereotype.Controller;
导入org.springframework.ui.Model;
导入org.springframework.web.bind.annotation.RequestMapping;
/**
*@作者Abhijit Ghosh
*@version 1.0
*/
@控制器
公共级SpringMobileHelloController{
私有静态最终记录器Logger=Logger.getLogger(SpringMobileHelloController.class.getName());
@请求映射(“/”)
公共字符串sayHello(SitePreference SitePreference、设备设备、型号){
logger.info(“SitePreference:+SitePreference”);
logger.info(“设备:+设备”);
addAttribute(“message”,“helloworld!”);
返回“helloWorld”;
}
}
我的dispatcher-servlet.xml是:
(部分省略)
请帮助我,因为我是spring mobile的初学者。这个例子可以在spring source官方网站上找到。它说设备是一个接口,但我只使用了它的实现类。基本上我认为这是dispatcher servlet中的一个错误。xml尝试使用设备过滤器:
<filter>
<filter-name>deviceResolverRequestFilter</filter-name>
<filter-class>org.springframework.mobile.device.DeviceResolverRequestFilter</filter-class>
</filter>
我也有同样的问题,用第二种方法解决。尝试使用设备过滤器:
<filter>
<filter-name>deviceResolverRequestFilter</filter-name>
<filter-class>org.springframework.mobile.device.DeviceResolverRequestFilter</filter-class>
</filter>
我有同样的问题,用第二种方法解决。检查
是否在其他地方没有定义。
只需添加:
<mvc:annotation-driven>
<mvc:argument-resolvers>
<bean class="org.springframework.mobile.device.DeviceWebArgumentResolver" />
<bean class="org.springframework.mobile.device.site.SitePreferenceWebArgumentResolver" />
</mvc:argument-resolvers>
</mvc:annotation-driven>
检查是否在其他地方未定义
。
只需添加:
<mvc:annotation-driven>
<mvc:argument-resolvers>
<bean class="org.springframework.mobile.device.DeviceWebArgumentResolver" />
<bean class="org.springframework.mobile.device.site.SitePreferenceWebArgumentResolver" />
</mvc:argument-resolvers>
</mvc:annotation-driven>
除了leogps答案之外,下面是Java配置
@Bean
public DeviceHandlerMethodArgumentResolver deviceHandlerMethodArgumentResolver() {
return new DeviceHandlerMethodArgumentResolver();
}
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(deviceHandlerMethodArgumentResolver());
}
@Bean
公共设备HandlerMethodArgumentResolver设备HandlerMethodArgumentResolver(){
返回新的DeviceHandlerMethodArgumentResolver();
}
@凌驾
public void addArgumentResolver(列出ArgumentResolver){
add(deviceHandlerMethodArgumentResolver());
}
除了leogps答案之外,下面是Java配置
@Bean
public DeviceHandlerMethodArgumentResolver deviceHandlerMethodArgumentResolver() {
return new DeviceHandlerMethodArgumentResolver();
}
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(deviceHandlerMethodArgumentResolver());
}
@Bean
公共设备HandlerMethodArgumentResolver设备HandlerMethodArgumentResolver(){
返回新的DeviceHandlerMethodArgumentResolver();
}
@凌驾
public void addArgumentResolver(列出ArgumentResolver){
add(deviceHandlerMethodArgumentResolver());
}
您必须为此添加参数解析器。
跟随
如果要将当前设备作为参数传递给@Controller方法之一,请配置DeviceWebArgumentResolver:
<annotation-driven>
<argument-resolvers>
<bean class="org.springframework.mobile.device.DeviceWebArgumentResolver" />
</argument-resolvers>
</annotation-driven>
您也可以使用基于Java的配置配置DeviceHandlerMethodArgumentResolver:
@Bean
public DeviceHandlerMethodArgumentResolver deviceHandlerMethodArgumentResolver() {
return new DeviceHandlerMethodArgumentResolver();
}
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(deviceHandlerMethodArgumentResolver());
}
@Bean
公共设备HandlerMethodArgumentResolver设备HandlerMethodArgumentResolver(){
返回新的DeviceHandlerMethodArgumentResolver();
}
@凌驾
public void addArgumentResolver(列出ArgumentResolver){
add(deviceHandlerMethodArgumentResolver());
}
您必须为此添加参数解析器。
跟随
如果要将当前设备作为参数传递给@Controller方法之一,请配置DeviceWebArgumentResolver:
<annotation-driven>
<argument-resolvers>
<bean class="org.springframework.mobile.device.DeviceWebArgumentResolver" />
</argument-resolvers>
</annotation-driven>
您也可以使用基于Java的配置配置DeviceHandlerMethodArgumentResolver:
@Bean
public DeviceHandlerMethodArgumentResolver deviceHandlerMethodArgumentResolver() {
return new DeviceHandlerMethodArgumentResolver();
}
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(deviceHandlerMethodArgumentResolver());
}
@Bean
公共设备HandlerMethodArgumentResolver设备HandlerMethodArgumentResolver(){
返回新的DeviceHandlerMethodArgumentResolver();
}
@凌驾
public void addArgumentResolver(列出ArgumentResolver){
add(deviceHandlerMethodArgumentResolver());
}
有什么帮助吗?设备过滤器对您有帮助@user2354150?或者你发现了一些不同的东西可以使用?可以帮助吗?设备过滤器可以帮助你@user2354150?或者您发现了一些不同的东西可供使用?这在此处的2.3.2中有介绍:。当然,我是通过阅读2.3.1才发现这一点的。这里的2.3.2介绍了这一点:。当然,我是通过阅读2.3.1才发现这一点的