您的位置:首页 > 产品设计 > UI/UE

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:

@ImplementedBy(MyClassImpl.class)
public interface MyClassInterface {
....
}

需要在BindMoudle类的configureServlets方法中 创建一个绑定:

bind(MyClassInterface.class).to(MyClassImpl.class);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  guice