guice整合Jersey框架简单实例
2018-01-18 00:00
295 查看
Guice是Google开发的一个轻量级,基于Java5(主要运用泛型与注释特性)的依赖注入框架(IOC)。Guice非常小而且快。Guice是类型安全的,它能够对构造函数,属性,方法(包含任意个参数的任意方法,而不仅仅是setter方法)进行注入。
maven:
<dependency>
<groupId>com.google.inject.extensions</groupId>
<artifactId>guice-servlet</artifactId>
<version>3.0</version>
</dependency>
<!-- Jersey - JAX-RS Implementation -->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.17.1</version>
</dependency>
<!-- Jersey - Guice extension -->
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-guice</artifactId>
<version>1.17.1</version>
</dependency>
<!-- Jackson for JSON support -->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.17.1</version>
</dependency>
web.xml配置如下(加载顺序为:context-param -> listener -> filter -> servlet 同类按照web.xml配置顺序):
<filter>
<filter-name>guiceFilter</filter-name>
<filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>guiceFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>xxx.ScreenServletContextListener</listener-class>
</listener>
guice需要配置一个listener类 继承GuiceServletContextListener ,在该类中重写getInjector方法
public class ScreenServletContextListener extends GuiceServletContextListener {
@Override
protected Injector getInjector() {
List<Module> modules = new ArrayList<Module>();
//加载数据库配置文件 整合mybatis
modules.add(new XMLMyBatisModule() {
@Override
protected void initialize() {
setEnvironmentId("xxx");
setClassPathResource("mybatis-config.xml");
}
});
modules.add(new BindModule());
return Guice.createInjector(modules);
}
}
BindModule代码:
public class BindModule extends AbstractModule {
@Override
protected void configure() {
install(new ServletModule() {
@Override
protected void configureServlets() {
// 绑定接口资源
//用户信息(查询数据库接口)
bind(UserInfoResource.class);
bind(UserInfoService.class).to(UserInfoServiceImpl.class);
bind(UserInfoDao.class).to(UserInfoDaoImpl.class);
// 集成jersey访问
bind(GuiceContainer.class);
// 集成jackson json格式转换
bind(JacksonJsonProvider.class).in(Scopes.SINGLETON);
//项目访问路径配置
serve("/*").with(GuiceContainer.class);
}
});
}
}
对应的resource
@Path("/userinfo")
public class UserInfoResource {
@Inject
private UserInfoService userInfoService;
/**
* GET请求 获取用户信息
*
* @param request
* @return
* @throws Exception
*/
@GET
@Path("/getUserInfoById")
@Produces(MediaType.APPLICATION_JSON)
public UserInfo getUserInfoById(@QueryParam("id") int id, @Context HttpServletRequest request)
throws Exception {
int userId =Integer.parseInt(request.getParameter(“userId”));
return userInfoService.getUserInfoById(userId);
}
dao:
public interface UserInfoDao {
List<UserInfo> getUserInfoById(int userId);
}
daoimpl:
@Singleton
public class UserInfoDaoImpl implements UserInfoDao {
@Inject
private SqlSessionManager sqlSessionManager;
@Override
public UserInfo getUserInfoById(int userId) {
return sqlSessionManager.getMapper(UserInfoMapper.class).getUserInfoById(userId);
}
}
service:
public interface UserInfoService {
public UserInfoRespVO getUserInfoById(int userId) throws Exception;
}
serviceImpl:
@Singleton
public class UserInfoServiceImpl implements UserInfoService {
@Inject
private UserInfoDao userInfoDao;
@Override
public UserInfo getUserInfoById(int userId) throws Exception {
UserInfo user = userInfoDao.getUserInfoById(userId);
}
--------------------------------------------------
PS:guice实现注入还可以通过 注解 implementedBy 网上的前辈有很多例子不再赘述
ex:
需要在BindMoudle类的configureServlets方法中 创建一个绑定:
maven:
<dependency>
<groupId>com.google.inject.extensions</groupId>
<artifactId>guice-servlet</artifactId>
<version>3.0</version>
</dependency>
<!-- Jersey - JAX-RS Implementation -->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.17.1</version>
</dependency>
<!-- Jersey - Guice extension -->
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-guice</artifactId>
<version>1.17.1</version>
</dependency>
<!-- Jackson for JSON support -->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.17.1</version>
</dependency>
web.xml配置如下(加载顺序为:context-param -> listener -> filter -> servlet 同类按照web.xml配置顺序):
<filter>
<filter-name>guiceFilter</filter-name>
<filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>guiceFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>xxx.ScreenServletContextListener</listener-class>
</listener>
guice需要配置一个listener类 继承GuiceServletContextListener ,在该类中重写getInjector方法
public class ScreenServletContextListener extends GuiceServletContextListener {
@Override
protected Injector getInjector() {
List<Module> modules = new ArrayList<Module>();
//加载数据库配置文件 整合mybatis
modules.add(new XMLMyBatisModule() {
@Override
protected void initialize() {
setEnvironmentId("xxx");
setClassPathResource("mybatis-config.xml");
}
});
modules.add(new BindModule());
return Guice.createInjector(modules);
}
}
BindModule代码:
public class BindModule extends AbstractModule {
@Override
protected void configure() {
install(new ServletModule() {
@Override
protected void configureServlets() {
// 绑定接口资源
//用户信息(查询数据库接口)
bind(UserInfoResource.class);
bind(UserInfoService.class).to(UserInfoServiceImpl.class);
bind(UserInfoDao.class).to(UserInfoDaoImpl.class);
// 集成jersey访问
bind(GuiceContainer.class);
// 集成jackson json格式转换
bind(JacksonJsonProvider.class).in(Scopes.SINGLETON);
//项目访问路径配置
serve("/*").with(GuiceContainer.class);
}
});
}
}
对应的resource
@Path("/userinfo")
public class UserInfoResource {
@Inject
private UserInfoService userInfoService;
/**
* GET请求 获取用户信息
*
* @param request
* @return
* @throws Exception
*/
@GET
@Path("/getUserInfoById")
@Produces(MediaType.APPLICATION_JSON)
public UserInfo getUserInfoById(@QueryParam("id") int id, @Context HttpServletRequest request)
throws Exception {
int userId =Integer.parseInt(request.getParameter(“userId”));
return userInfoService.getUserInfoById(userId);
}
dao:
public interface UserInfoDao {
List<UserInfo> getUserInfoById(int userId);
}
daoimpl:
@Singleton
public class UserInfoDaoImpl implements UserInfoDao {
@Inject
private SqlSessionManager sqlSessionManager;
@Override
public UserInfo getUserInfoById(int userId) {
return sqlSessionManager.getMapper(UserInfoMapper.class).getUserInfoById(userId);
}
}
service:
public interface UserInfoService {
public UserInfoRespVO getUserInfoById(int userId) throws Exception;
}
serviceImpl:
@Singleton
public class UserInfoServiceImpl implements UserInfoService {
@Inject
private UserInfoDao userInfoDao;
@Override
public UserInfo getUserInfoById(int userId) throws Exception {
UserInfo user = userInfoDao.getUserInfoById(userId);
}
--------------------------------------------------
PS:guice实现注入还可以通过 注解 implementedBy 网上的前辈有很多例子不再赘述
ex:
@ImplementedBy(MyClassImpl.class) public interface MyClassInterface { .... }
需要在BindMoudle类的configureServlets方法中 创建一个绑定:
bind(MyClassInterface.class).to(MyClassImpl.class);
相关文章推荐
- CXF框架整合SPring 搭建WebServce简单实例
- SSM框架搭建过程--SSM简单整合实例
- SSH 框架整合的简单实例
- SpringMVC笔记——SSM框架搭建简单实例
- Spring-与Struts简单框架的整合
- 基于dwr框架的简单实例 转帖
- mybatis 框架简单实例
- Spring+Springmvc+Hibernate框架搭建,简单实例
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
- SSM框架简单整合
- Dwr 框架简单实例
- 高性能tornado框架简单实现restful接口及运维开发实例 推荐
- 权限框架 - shiro 简单入门实例
- 用Maven整合SpringMVC+Spring+Hibernate 框架,实现简单的插入数据库数据功能(二)
- java web ssh三大框架整合简单入门
- CI框架简单邮件发送类实例
- java缓存框架---ehcache简单实例
- 一个简单的DWR框架实例
- 基于MyEclipse 8.0 GA整合S2SH框架实例教程(一)
- SSM框架整合实现简单的分页效果