Spring Mobile 2.0.0 M3 特性与更新
Spring Mobile 2.0.0 M3 是 Spring 框架的一个模块,专注于为移动设备提供开发支持。它提供了一套工具和 API,帮助开发者更容易地构建适用于各种移动设备的应用程序。
主要特性
- 跨平台支持:
- 支持多种移动操作系统,包括 iOS、Android、BlackBerry OS 和 Windows Phone。
- 轻量级架构:
- 设计为轻量级,易于集成到现有的 Spring 应用中,同时也支持独立使用。
- 设备适配:
- 能够根据访问设备的屏幕大小、分辨率和操作系统类型自动调整页面布局和样式。
- 模板引擎支持:
- 支持多种模板引擎,如 JSP、Thymeleaf 等。
- 国际化与本地化:
- 提供国际化和本地化支持,适应不同语言和文化背景的用户。
- 数据绑定:
- 通过 Spring 的依赖注入和数据绑定机制,简化数据处理流程。
- 安全性增强:
- 提供加密、认证等功能,保护用户数据安全。
- 站点切换:
- 提供站点切换功能,允许用户在移动、平板和普通站点之间切换。
- 设备感知视图管理:
- 支持为不同设备组织和管理特定的视图。
配置示例
以下是一些配置 Spring Mobile 的示例代码:
-
设备检测:
@Bean public DeviceResolverHandlerInterceptor deviceResolverHandlerInterceptor() { return new DeviceResolverHandlerInterceptor(); } @Bean public DeviceHandlerMethodArgumentResolver deviceHandlerMethodArgumentResolver() { return new DeviceHandlerMethodArgumentResolver(); } @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(deviceResolverHandlerInterceptor()); } @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { argumentResolvers.add(deviceHandlerMethodArgumentResolver()); }
在控制器中注入
Device
:@Controller public class HomeController { @RequestMapping("/") public void home(Device device) { if (device.isMobile()) { // 处理移动设备逻辑 } else if (device.isTablet()) { // 处理平板设备逻辑 } else { // 处理桌面设备逻辑 } } }
-
站点偏好管理:
@Bean public SitePreferenceHandlerInterceptor sitePreferenceHandlerInterceptor() { return new SitePreferenceHandlerInterceptor(); } @Bean public SitePreferenceHandlerMethodArgumentResolver sitePreferenceHandlerMethodArgumentResolver() { return new SitePreferenceHandlerMethodArgumentResolver(); } @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(sitePreferenceHandlerInterceptor()); } @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { argumentResolvers.add(sitePreferenceHandlerMethodArgumentResolver()); }
在控制器中注入
SitePreference
:@Controller public class HomeController { @RequestMapping("/") public String home(SitePreference sitePreference, Model model) { if (sitePreference == SitePreference.NORMAL) { // 处理普通站点逻辑 } else if (sitePreference == SitePreference.MOBILE) { // 处理移动站点逻辑 } else if (sitePreference == SitePreference.TABLET) { // 处理平板站点逻辑 } return "home"; } }
-
设备感知视图解析:
@Bean public LiteDeviceDelegatingViewResolver liteDeviceAwareViewResolver() { InternalResourceViewResolver delegate = new InternalResourceViewResolver(); delegate.setPrefix("/WEB-INF/views/"); delegate.setSuffix(".jsp"); LiteDeviceDelegatingViewResolver resolver = new LiteDeviceDelegatingViewResolver(delegate); resolver.setMobilePrefix("mobile/"); resolver.setTabletPrefix("tablet/"); return resolver; }
官方文档
- 更多详细信息可以参考 Spring Mobile 2.0.0 M3 官方文档。
Spring Mobile 2.0.0 M3 提供了强大的功能,用于简化移动应用开发,支持多种移动平台,并提供设备适配、模板引擎支持、国际化与本地化等功能。
Spring Mobile is a framework that provides capabilities to detect the type of device making a request to your Spring web site and serve alternative views based on that device. Like all Spring projects, the real power of Spring Mobile is found in how easily it can be extended.
Features
A Device resolver abstraction for server-side detection of mobile and tablet devices
Site preference management that allows the user to indicate if he or she prefers a “normal”, “mobile”, or “tablet” experience
A site switcher capable of switching the user to the most appropriate site, either mobile, tablet, or normal, based on his or her device and optionally indicated site preference
Device aware view management for organizing and managing different views for specific devices
Spring Boot Config
To use Spring Mobile, add the following dependency to your application
Maven
Gradle
dependencies {
compile ‘org.springframework.mobile:spring-mobile-device:2.0.0.M3’
}repositories {
maven {
url ‘https://repo.spring.io/libs-milestone’
}
}
Device detection
Add the following Java-based configuration to enable device detection in a Spring web application:
@Bean
public DeviceResolverHandlerInterceptor
deviceResolverHandlerInterceptor() {
return new DeviceResolverHandlerInterceptor();
}
@Bean
public DeviceHandlerMethodArgumentResolver
deviceHandlerMethodArgumentResolver() {
return new DeviceHandlerMethodArgumentResolver();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(deviceResolverHandlerInterceptor());
}
@Override
public void addArgumentResolvers(
List argumentResolvers) {
argumentResolvers.add(deviceHandlerMethodArgumentResolver());
}
Inject the Device into your controller:
@Controller
public class HomeController {
private static final Logger logger =
LoggerFactory.getLogger(HomeController.class);
@RequestMapping("/")
public void home(Device device) {
if (device.isMobile()) {
logger.info("Hello mobile user!");
} else if (device.isTablet()) {
logger.info("Hello tablet user!");
} else {
logger.info("Hello desktop user!");
}
}
}
Site preference
Add the following Java-based configuration to enable site preference management in a Spring web application:
@Bean
public DeviceResolverHandlerInterceptor
deviceResolverHandlerInterceptor() {
return new DeviceResolverHandlerInterceptor();
}
@Bean
public SitePreferenceHandlerInterceptor
sitePreferenceHandlerInterceptor() {
return new SitePreferenceHandlerInterceptor();
}
@Bean
public SitePreferenceHandlerMethodArgumentResolver
sitePreferenceHandlerMethodArgumentResolver() {
return new SitePreferenceHandlerMethodArgumentResolver();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(deviceResolverHandlerInterceptor());
registry.addInterceptor(sitePreferenceHandlerInterceptor());
}
@Override
public void addArgumentResolvers(
List argumentResolvers) {
argumentResolvers.add(sitePreferenceHandlerMethodArgumentResolver());
}
Inject the SitePreference into your controller:
@Controller
public class HomeController {
private static final Logger logger =
LoggerFactory.getLogger(HomeController.class);
@RequestMapping("/")
public String home(SitePreference sitePreference, Model model) {
if (sitePreference == SitePreference.NORMAL) {
logger.info("Site preference is normal");
return "home";
} else if (sitePreference == SitePreference.MOBILE) {
logger.info("Site preference is mobile");
return "home-mobile";
} else if (sitePreference == SitePreference.TABLET) {
logger.info("Site preference is tablet");
return "home-tablet";
} else {
logger.info("no site preference");
return "home";
}
}
}
Device aware view resolution
Add the following Java-based configuration to enable device aware views in a Spring web application. This specifies that Spring Mobile will look for mobile views in /WEB-INF/views/mobile/ and tablet views in /WEB-INF/views/tablet/.
@Bean
public LiteDeviceDelegatingViewResolver liteDeviceAwareViewResolver() {
InternalResourceViewResolver delegate =
new InternalResourceViewResolver();
delegate.setPrefix(“/WEB-INF/views/”);
delegate.setSuffix(“.jsp”);
LiteDeviceDelegatingViewResolver resolver =
new LiteDeviceDelegatingViewResolver(delegate);
resolver.setMobilePrefix(“mobile/”);
resolver.setTabletPrefix(“tablet/”);
return resolver;
}