Google Guice 简介

2024-02-24 19:32
文章标签 简介 google guice

本文主要是介绍Google Guice 简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Dependency Injection (依赖注入)

也就是说将一个接口绑定到具体的类中,这样的话,客户端就不用关心具体的实现,只需要获取相应的接口完成其服务就行了。

写一个接口,里面写一些方法,然后写一个实现类,将方法全部实现。使用的是Annotation,而不是传统意义上的xml或者properties文件。

然后在真正的功能类中,想要使用的时候,先声明一个Injector

Injector injector = Guice.createInjector(里面放一个Module接口的实现类,或者其它抽象类比如AbstractModule的子实现类),Module类的实现类必须实现configure(Binder binder)方法,

即 public void configure(Binder binder){
     binder.bind(接口.class).to(实现类.class);    //不可以自己绑定自己
}

比如: bind.(Service.class).to(ServiceImpl.class);

注意:Guice不允许绑定多个实现在一个接口上,所以实现可以写很多个,但是真正配置的时候,只能绑定一个。这个是可以理解的,试想,你在找实现类的时候总要有一种机制保证到底使用哪一种吧,不可能都使用。

然后当你需要调用的时候,定义一个接口类型的变量,并且赋值

接口类 Service service= injector.getInstance(Service.class);

这样就相当于把ServiceImpl的实例传了过来,然后再调用里面的方法

总结一下,意思就是,将一个ServiceImpl的实例和Service关联起来,当向Guice请求获取一个Service实例的时候,Guice就返回一个ServiceImpl的实例,然后就可以调用Service里面的方法了。

1. @Singleton

使用Injector默认的配置,每次Guice都会返回一个新的实例,有时候可能不希望这样。如果需要实现单例模式(事实上我觉得很多估计都是单例吧),就直接在实现类的类名前面一行加上一个@Singlton标注一下就行

比如
@Singleton
public class ServiceImpl implements Service{
              xxx
              xxx
}

2. @Inject

可以注入构造方法,主要的目的,应该是参数传递。往往实现类中会定义一些成员变量,这些成员变量很可能就是一些接口,然后通过注入构造函数将它们和一些实现类绑定。这样同样也是有个好处,代码维护成本低。试想,你本来使用着一个框架,但是突然小组决定更换框架,这个时候使用注入只需要改一下绑定配置就行了。

反正知道这么个原理就行,注入一些和服务有关系的,服务本身,或者将服务作为参数的构造函数。然后绑定好,通过调用injector来获取实例,使用服务。

这篇关于Google Guice 简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/743128

相关文章

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

业务协同平台--简介

一、使用场景         1.多个系统统一在业务协同平台定义协同策略,由业务协同平台代替人工完成一系列的单据录入         2.同时业务协同平台将执行任务推送给pda、pad等执行终端,通知各人员、设备进行作业执行         3.作业过程中,可设置完成时间预警、作业节点通知,时刻了解作业进程         4.做完再给你做过程分析,给出优化建议         就问你这一套下

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理  控制平面(Control plane)         kube-apiserver         etcd         kube-scheduler         kube-controller-manager         cloud-controlle

【Tools】AutoML简介

摇来摇去摇碎点点的金黄 伸手牵来一片梦的霞光 南方的小巷推开多情的门窗 年轻和我们歌唱 摇来摇去摇着温柔的阳光 轻轻托起一件梦的衣裳 古老的都市每天都改变模样                      🎵 方芳《摇太阳》 AutoML(自动机器学习)是一种使用机器学习技术来自动化机器学习任务的方法。在大模型中的AutoML是指在大型数据集上使用自动化机器学习技术进行模型训练和优化。

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法   消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法 [转载]原地址:http://blog.csdn.net/x605940745/article/details/17911115 消除SDK更新时的“

SaaS、PaaS、IaaS简介

云计算、云服务、云平台……现在“云”已成了一个家喻户晓的概念,但PaaS, IaaS 和SaaS的区别估计还没有那么多的人分得清,下面就分别向大家普及一下它们的基本概念: SaaS 软件即服务 SaaS是Software-as-a-Service的简称,意思是软件即服务。随着互联网技术的发展和应用软件的成熟, 在21世纪开始兴起的一种完全创新的软件应用模式。 它是一种通过Internet提供

LIBSVM简介

LIBSVM简介 支持向量机所涉及到的数学知识对一般的化学研究者来说是比较难的,自己编程实现该算法难度就更大了。但是现在的网络资源非常发达,而且国际上的科学研究者把他们的研究成果已经放在网络上,免费提供给用于研究目的,这样方便大多数的研究者,不必要花费大量的时间理解SVM算法的深奥数学原理和计算机程序设计。目前有关SVM计算的相关软件有很多,如LIBSVM、mySVM、SVMLight等,这些

urllib与requests爬虫简介

urllib与requests爬虫简介 – 潘登同学的爬虫笔记 文章目录 urllib与requests爬虫简介 -- 潘登同学的爬虫笔记第一个爬虫程序 urllib的基本使用Request对象的使用urllib发送get请求实战-喜马拉雅网站 urllib发送post请求 动态页面获取数据请求 SSL证书验证伪装自己的爬虫-请求头 urllib的底层原理伪装自己的爬虫-设置代理爬虫coo

新一代车载(E/E)架构下的中央计算载体---HPC软件架构简介

老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节能减排。 无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事.而不是让内心的烦躁、焦虑、毁掉你本就不多的热情和定力。 时间不知不觉中,快要来到夏末秋初。一年又过去了一大半,成

AI学习指南深度学习篇-带动量的随机梯度下降法简介

AI学习指南深度学习篇 - 带动量的随机梯度下降法简介 引言 在深度学习的广阔领域中,优化算法扮演着至关重要的角色。它们不仅决定了模型训练的效率,还直接影响到模型的最终表现之一。随着神经网络模型的不断深化和复杂化,传统的优化算法在许多领域逐渐暴露出其不足之处。带动量的随机梯度下降法(Momentum SGD)应运而生,并被广泛应用于各类深度学习模型中。 在本篇文章中,我们将深入探讨带动量的随