美文网首页
三分钟快速了解 Google Guice依赖注入框架

三分钟快速了解 Google Guice依赖注入框架

作者: lazy_zhu | 来源:发表于2020-06-21 00:35 被阅读0次

Guice是Google开源的一个依赖注入类库,相比于Spring IoC来说更小更快,而最大的区别在于脱离的XML配置,大量使用Annotation来实现注入,支持属性,构造器,setter等多种功能方式注入对象。我们常用的Elastic Search中大量使用Guice。

Google Guice注入

1. Module容器

Guice中容器即Module,用于绑定接口和实现类,类似Spring的applicationContext.xml。Module就像一个Map,获取对象时需要传入绑定的class就能获得实体类,有两种方法完成配置:

  1. 实现Module接口
Injector injector = Guice.createInjector(new Module(){
    @Override
    public void configure(Binder binder) {
        binder.bind(UserService.class).to(UserServiceImpl.class);
    }
});

// 获取对象实例
UserService userService = injector.getInstance(UserService.class);
  1. 继承AbstractModule抽象类
public class DependencyInjectionModule extends AbstractModule {
    //需要实现的配置关联方法
    @Override
    protected void configure() {
        bind(UserService.class).to(UserServiceImpl.class);
        bind(UserRepository.class).to(UserRepositoryDynamoDB.class);
    }
}

2. Inject注入

  1. setter 方法注入
@Inject
public void setUserService(UserService userService) {
    this.userService = userService;
}
  1. 构造函数注入
    构造函数上添加@Inject注解,可以实现在对象初始化的时候自动提供参数。
public class UserServiceImpl implements UserService {
    private final UserRepository userRepository;
    @Inject
    public UserServiceImpl(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}
  1. 属性注入
    属性注入时 必须通过Guice.createInjector().getInstance(UserService.class);来获取实现类, 如果直接new, 会inject失败。
public class UserServiceImpl implements UserService {
    @Inject
    private final UserRepository userRepository;
}

3. injectMembers方法

如果一个类是new出来的,但是它里面的对象需要依赖需要注入,则可使用injectMembers方法。在测试代码中Handle是直接new出来。

Handler Handler = new Handler();
Guice.createInjector().injectMembers(Handler);

4. Main方法调用

最后直接使用Main方法测试下,gradle runMain,例子中的Main方法在DependencyInjectionModule类中。

public static void main(String[] args) {
    Injector injector = Guice.createInjector(new DependencyInjectionModule());
    UserService userService = injector.getInstance(UserService.class);
    User userByToken = userService.getUserByToken("1234");
    System.out.println(userByToken.getUsername());
}

测试工程

为了方便大家看到实际效果,下载代码可以看到以下目录结构。在命令行中cd到目录,运行gradle runMain就能看到效果,同时可以任意修改代码进行测试。

guice-ioc代码结构
代码下载地址: https://pan.baidu.com/s/1_1BK4MYhYKnimA6jFVPm1Q
提取码: qspx
//解压运行即可
gradle runMain

相关文章

网友评论

      本文标题:三分钟快速了解 Google Guice依赖注入框架

      本文链接:https://www.haomeiwen.com/subject/sbwnxktx.html