加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Guice——依赖注入demo

发布时间:2020-12-14 04:32:45 所属栏目:百科 来源:网络整理
导读:换了新公司,刚上班,发现他们项目都不用spring进行DI,用的是简洁的guice。 pom配置: dependency groupId com.google.inject / groupId artifactId guice / artifactId version 4.1.0 / version / dependency 代码示例: log接口: /** * * Created: liuh

换了新公司,刚上班,发现他们项目都不用spring进行DI,用的是简洁的guice。
pom配置:

<dependency>
            <groupId>com.google.inject</groupId>
            <artifactId>guice</artifactId>
            <version>4.1.0</version>
        </dependency>

代码示例:

log接口:

/** * * Created: liuhuichao * * Date: 2018/3/28 * * Time: 上午9:36 * * Description: *  */
public interface LogService {
    void log(String msg);
}

log实现类:

/** * * Created: liuhuichao * * Date: 2018/3/28 * * Time: 上午9:37 * * Description: *  */
public class LogServiceImpl implements LogService {

    @Override
    public void log(String msg) {
        System.out.println("------LOG:" + msg);
    }
}

一个简单的业务接口:

/** * * Created: liuhuichao * * Date: 2018/3/28 * * Time: 上午9:35 * * Description: *  */
public interface UserService {
    void process();
}

简单的业务实现类:

/** * * Created: liuhuichao * * Date: 2018/3/28 * * Time: 上午9:35 * * Description: *  */
public class UserServiceImpl implements UserService {

    @Override
    public void process() {
        System.out.println("我需要的一些操作");
    }
}

调用接口:

/** * * Created: liuhuichao * * Date: 2018/3/28 * * Time: 上午9:38 * * Description: *  */
public interface Application {
    void work();
}

实现类:

/** * * Created: liuhuichao * * Date: 2018/3/28 * * Time: 上午9:38 * * Description: *  */
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("程序正常运行");
    }
}

注入方式为在构造方法中,为方法添加inject注解。
另外,需要再代码中,手动指定接口和实现的关系:

/** * * Created: liuhuichao * * Date: 2018/3/28 * * Time: 上午9:51 * * Description: *  */
public class MyAppModule extends AbstractModule {

    /** * 调用AbstractModule类提供的一些方法来配置依赖关系 */
    @Override
    protected void configure() {
        bind(LogService.class).to(LogServiceImpl.class);
        bind(UserService.class).to(UserServiceImpl.class);
        bind(Application.class).to(MyApp.class);
    }
}

测试代码:

/** * * Created: liuhuichao * * Date: 2018/3/28 * * Time: 上午9:55 * * Description: *  */
public class MyAppTest {

    private static Injector injector;

    @BeforeClass
    public static void init() {
        injector = Guice.createInjector(new MyAppModule());//通过配置类初始化guice
    }

    @Test
    public void testMyApp() {
        Application myApp = injector.getInstance(Application.class);
        myApp.work();
    }



}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读