弹性搜索使用谷歌开源的依赖注入框架桂思,这个项目号称比春天快100倍,具体性能没有测试过,不过由于其代码比较简洁,比春天快很有可能,是不是快那么多就不知道了。先介绍下什么是的基本使用方法。
弹性搜索是直接把什么是的源码放到自己的包内(es把很多开源项目的代码都直接集成到自己项目中,省得依赖一堆的冲突包,也使萨尔瓦多的冲突包达到差不多10M),在org。弹性搜索。常见。注射目录下。
Guice主要是使用组件这个接口来确定各个接口和它们对应的实现。这个组件是个单例的抽象接口,通过绑定(甲)百分之五十.致(二)来绑定指定实例到这个模块中,下面看下Guice官方文档中的例子:
视图纯文本
公共类计费模块扩展抽象模块{
@覆盖
protectedvoid configure() {
bind(TransactionLog.class).到(databasetransactionlog。类);
bind(CreditCardProcessor.class).到(paypalcreditcardprocessor。类);
bind(BillingService.class).到(realbillingservice。类);
}
}
上面定义了一个订单模块,扩展抽象模块这个抽象类。这个模块里面有三个实例:交易日志、支付过程和账单服务。通过绑定(“接口")。至("实施")来使接口和实现绑定。
视图纯文本
publicclass RealBillingService实现计费服务{
私人决赛信用卡处理器处理器;
私有最终事务日志事务日志;
@注入
公共RealBillingService(信用卡处理器处理器,
TransactionLog transactionLog) {
this .处理器=处理器;
这个。事务日志=事务日志;
}
公共收据收费订单(披萨订单订单,信用卡信用卡){
尝试{
充电结果结果=处理器。收费(信用卡,订单。get amount());
transactionLog.logChargeResult(结果);
返回result.wasSuccessful()
?收据。forsuccessfulcharge(订单。获取金额())
:收据。fordeclinedcharge(结果。getdeclinemessage());
} catch (UnreachableException e) {
交易日志。logconnectexception(e);
回执。forsystemfailure(e . getmessage());
}
}
}
上面类是账单服务接口的实现类。其中要注意的就是@注入这个注释100 .Guice的注射器类会扫描@注入这类注释,找到方法中传入参数的实例进行注入。如上面的信用卡处理器和交易日志。
视图纯文本
publicstaticvoid main(字符串参数){
喷油器喷油器=guice。创建注入器(新计费模块());
计费服务计费服务=注射器。getinstance(计费服务。类);
.
}
最后,在主要的方法中使用注射器进行注入与获取实例。这就是使用Guice进行依赖注入的一个简单例子弹性搜索里面的组件基本都是用上面的方式进行模块化管理,弹性搜索对什么是进行了简单的封装,通过模块生成器类构建萨尔瓦多的模块,一个萨尔瓦多节点包括下面模块:
插件模块:插件模块
设置模块:设置参数模块
节点模块:节点模块
网络模块:网络模块
NodeCacheModule:缓存模块
脚本模块:脚本模块
管理扩展模块:JMX模块
环境模块:环境模块
NodeEnvironmentModule:节点环境模块
ClusterNameModule:集群名模块
ThreadPoolModule:线程池模块
发现模块:自动发现模块
集群模块:集群模块
休息模块:休息模块
传输模块:tcp模块
服务器模型:http模块
河流模块:河流模块
指示模块:索引模块
搜索模块:搜索模块
动作模块:行为模块
监控模块:监控模块
网关模块:持久化模块
节点客户端模块:客户端模块
接下来的文章会分析其中一些重要的模块。