博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Guice学习
阅读量:6317 次
发布时间:2019-06-22

本文共 2954 字,大约阅读时间需要 9 分钟。

hot3.png

    Guice的github地址: 

    这个例子很简单,如果会点Guice,那么不需要再往下看了。

    简单来说,它是dependeny injection框架,它与Spring相比,作者已经给出了,见

1.添加依赖

    List-1 pom.xml中添加如下依赖

com.google.inject
guice
4.0

2.定义接口及实现类

2.1 CreditCardProcessor

    List-2

/** * @author dmj1161859184@126.com 2018-09-10 20:00 * @version 1.0 * @since 1.0 */public interface CreditCardProcessor {    ChargeResult charge(CreditCard credit, Object amount);}/** * @author dmj1161859184@126.com 2018-09-10 20:42 * @version 1.0 * @since 1.0 */public class PaypalCreditCardProcessorImpl implements CreditCardProcessor {    @Override    public ChargeResult charge(CreditCard credit, Object amount) {        LOG.info("charge方法");        return null;    }}

2.2 TransactionLog

    List-3

/** * @author dmj1161859184@126.com 2018-09-10 20:00 * @version 1.0 * @since 1.0 */public interface TransactionLog {    void logChargeResult(ChargeResult result);    void logConnectException(Exception e);}/** * @author dmj1161859184@126.com 2018-09-10 20:07 * @version 1.0 * @since 1.0 */public class DatabaseTransactionLogImpl implements TransactionLog {    @Override    public void logChargeResult(ChargeResult result) {        LOG.info("logChargeResult方法");    }    @Override    public void logConnectException(Exception e) {        LOG.info("logConnectException方法");    }}

2.3 BillingService

    List-4

/** * @author dmj1161859184@126.com 2018-09-10 19:59 * @version 1.0 * @since 1.0 */public interface BillingService {    Receipt chargeOrder(PizzaOrder order, CreditCard credit);}/** * @author dmj1161859184@126.com 2018-09-10 20:00 * @version 1.0 * @since 1.0 */public class BillingServiceImpl implements BillingService {    private final CreditCardProcessor processor;    private final TransactionLog transactionLog;    @Inject    public BillingServiceImpl(CreditCardProcessor processor,                              TransactionLog transactionLog) {        this.processor = processor;        this.transactionLog = transactionLog;    }    @Override    public Receipt chargeOrder(PizzaOrder order, CreditCard credit) {        try {            ChargeResult result = processor.charge(credit, order.getAmount());            transactionLog.logChargeResult(result);            return result.wasSuccessful()                    ? Receipt.forSuccessfulCharge(order.getAmount())                    : Receipt.forDeclinedCharge(result.getDeclineMessage());        } catch (Exception e) {            transactionLog.logConnectException(e);            return Receipt.forSystemFailure(e.getMessage());        }    }}

3.测试

    List-5

public class Main {    public static void main(String[] args) {        Injector injector = Guice.createInjector(new BillingModule());        BillingService billingService = injector.getInstance(BillingService.class);        billingService.chargeOrder(new PizzaOrder(), new CreditCard());    }}

    List-5的运行结果如下图1所示:

                                                  图1 List-5的运行结果

转载于:https://my.oschina.net/u/2518341/blog/2046410

你可能感兴趣的文章
putty如何用密钥登陆
查看>>
wdOS系统下安装PostgreSQL数据库~
查看>>
静态页面与动态页面
查看>>
我们为何采用安装包方式而不是编译或二进制方式安装新程序/软件呢?
查看>>
Shine OpenCart 自适应 多用途主题模板 ABC-0021
查看>>
搜索 -- grep
查看>>
linux 分区表恢复
查看>>
在linux下关闭IPV6
查看>>
python 第三方模块MySQLdb安装
查看>>
详细解析用Squid实现反向代理的方法
查看>>
JavaCore/HeapDump文件及其分析方法
查看>>
小强不一样的2015总结,不煽情不装逼,只是很直白而已
查看>>
jmeter学习指南之HTTP请求中自动重定向和跟随重定向的区别
查看>>
公开课视频-面霸是怎样炼成的
查看>>
mysql 的常用命令及常见问题解决方法
查看>>
bat执行sqlplus语句,省去@xx.sql过程
查看>>
Nuget.config格式错误,请检查nuget.config配置文件
查看>>
嵌入式软件工程师面试
查看>>
程序中的异常和错误处理
查看>>
Apache Spark源码走读之1 -- Spark论文阅读笔记
查看>>