ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Google Guice的使用方式

2021-07-21 15:29:46  阅读:221  来源: 互联网

标签:Google String 方式 Guice zhangmen public import com class


Google Guice(读音:juice)是从Google AdWords项目开源出来的一款轻量级的依赖注入(DI,Dependency Injection)框架(类似于spring boot依赖注入框架)

注解:@Inject 注入类(跟spring 的Autowired类似)
注解:@Singleton单例模式(跟spring 的Singleton类似)

主类:

package com.zhangmen;

import com.beust.jcommander.JCommander;
import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.zhangmen.context.BasicModule;
import com.zhangmen.entry.Student;
import com.zhangmen.service.TrackEventService;
import com.zhangmen.util.FileUtil;
import com.zhangmen.util.HdfsUtils;
import lombok.extern.slf4j.Slf4j;
import java.io.InputStream;

@Slf4j
public class TrackDataMain {

    @Inject
    private HdfsUtils hdfsUtils;

    @Inject
    private TrackEventService trackEventService;

    @Inject
    private Student student;

    public static void main(String[] args) throws Exception {
        log.info("DeduplicationJob.args:{}", String.join(" ", args));
        try {
//            Injector injector = Guice.createInjector(); //如果没有接口可以用这个,如果有接口及实现类,必须要在 BasicModule 中绑定
            Injector injector = Guice.createInjector(new BasicModule());
            TrackDataMain main = injector.getInstance(TrackDataMain.class);
            main.execute(args);
        } catch (Throwable ex) {
            log.error(ex.getMessage(), ex);
            throw ex;
        }
    }
    private void execute(String[] args) throws Exception {
        InputStream in = TrackDataMain.class.getClassLoader().getResourceAsStream("./application.properties");
        String[] loadConfigs = FileUtil.loadConfigs(in);
        JCommander.newBuilder()
                .addObject(new Object[]{student})
                .acceptUnknownOptions(true)
                .build()
                .parse(loadConfigs);
        System.out.println(student.toString());
        System.out.println(student.getName());

        System.out.println("输出语句!!!");
        String hdfsConfTmp = hdfsUtils.getHdfsConfTmp();
        System.out.println(hdfsConfTmp);
        System.out.println(trackEventService.getName());
    }
}

绑定接口及实现类,让guice发现

package com.zhangmen.context;

import com.google.inject.AbstractModule;
import com.zhangmen.service.TrackEventService;
import com.zhangmen.service.impl.TrackEventServiceImpl;
public class BasicModule extends AbstractModule {

    @Override
    protected void configure() {
        bind(TrackEventService.class).to(TrackEventServiceImpl.class);
//        bind(SourceDelegation.class).to(KafkaSourceDelegation.class);
    }
}

接口及实现类
注意: default 关键字的用法

package com.zhangmen.service;

/**
 * @Author zsq
 * @create 2021/6/17 17:35
 * @Description:
 */
public interface TrackEventService {

    /**
     * default 修饰方法,则实现类的值优先于接口的方法
     * @return
     */
    default String getName() {
        return null;
    }
}

package com.zhangmen.service.impl;

import com.zhangmen.service.TrackEventService;

/**
 * @Author zsq
 * @create 2021/6/17 17:35
 * @Description:
 */
public class TrackEventServiceImpl implements TrackEventService {
    @Override
    public String getName() {
        return "来玩耍呀";
    }
}

实体类: 通过 jcommander 来注入配置参数

package com.zhangmen.entry;

import com.beust.jcommander.Parameter;
import com.beust.jcommander.Parameters;
import com.google.inject.Singleton;
import lombok.Data;

@Singleton
@Data
@Parameters(separators = "=")
public class Student {

    @Parameter(names = "--kafka.consumer.servers")
    private String name;

    @Parameter(names = "--kafka.consumer.group.id")
    private String age;
}

标签:Google,String,方式,Guice,zhangmen,public,import,com,class
来源: https://blog.csdn.net/qq_42016966/article/details/118967127

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有