Guice是谷歌推出的一个轻量级依赖注入框架,帮助我们解决Java项目中的依赖注入问题。如果使用过Spring的话,会了解到依赖注入是个非常方便的功能。不过假如只想在项目中使用依赖注入,那么引入Spring未免大材小用了。这时候我们可以考虑使用Guice。本文参考了Guice官方文档,详细信息可以直接查看Guice文档。
基本使用
引入依赖
如果使用Maven的话,添加下面的依赖项。
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>4.1.0</version>
</dependency>
如果使用Gradle的话,添加下面的依赖项。
compile group: 'com.google.inject', name: 'guice', version: '4.1.0'
当构建工具解决完项目的依赖之后,我们就可以开始使用Guice了。
项目骨架
首先我们来假设一个简单的项目框架。首先我们需要一个业务接口,简单的包含一个方法用于执行业务逻辑。它的实现也非常简单。
public interface UserService {
void process();
}
public class UserServiceImpl implements UserService {
@Override
public void process() {
System.out.println("我需要做一些业务逻辑");
}
}
然后我们需要一个日志接口,它和它的实现也非常简单。
public interface LogService {
void log(String msg);
}
public class LogServiceImpl implements LogService {
@Override
public void log(String msg) {
System.out.println("------LOG:" + msg);
}
}
最后是一个系统接口和相应的实现。在实现中我们使用了业务接口和日志接口处理业务逻辑和打印日志信息。
public interface Application {
void work();
}
public class MyApp implements Application {
private UserService userService;
private LogService logService;
@Inject
public MyApp(UserService userService, LogService logService) {
this.userService = userService;
this.logService = logService;
}
@Override
public void work() {
userService.process();
logService.log("程序正常运行");
}
}
简单的依赖注入
首先来配置依赖关系。我们继承AbstractModule
类,并重写configure
方法即可。在configure
方法中,我们可以调用AbstractModule
类提供的一些方法来配置依赖关系。最常用的方式就是bind(接口或父类).to(实现类或子类)
的方式来设置依赖关系。
public class MyAppModule extends AbstractModule {
@Override
protected void configure() {
bind(LogService.class).to(LogServiceImpl.class);
bind(UserService.class).to(UserServiceImpl.class);