guice是什么?(借用百度百科的说明和对比)

Guice是Google开发的一个轻量级,基于Java5(主要运用泛型与注释特性)的依赖注入框架(IOC)。Guice非常小而且快。Guice是类型安全的,它能够对构造函数,属性,方法(包含任意个参数的任意方法,而不仅仅是setter方法)进行注入。Guice采用Java加注解的方式进行托管对象的配置,充分利用IDE编译器的类型安全检查功能和自动重构功能,使得配置的更改也是类型安全的。Guice提供模块对应的抽象module,使得架构和设计的模块概念产物与代码中的module类一一对应,更加便利的组织和梳理模块依赖关系,利于整体应用内部的依赖关系维护,而其他IOC框架是没有对应物的。此外,借助privateModule的功能,可以实现模块接口的明确导出和实现封装,使得支持多数据源这类需求实现起来异常简单。

我个人的见解:对于小型独立项目,比如:定时任务,后台辅助进程等等,这类项目完全可以用guice实现,简洁易懂、代码量少、jar包又小简直完美啊!ps:目前我已经改造了几个小工程了;

我的工程目录如下:

首先添加相关依赖,打开pom.xml

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

配置文件属性值

redis.database=0
redis.host=10.0.2.13
redis.port=6379
redis.password=
#连接池最大连接数(使用负值表示没有限制)
redis.pool.max.active=10000
# 连接池中的最大空闲连接
redis.pool.max.idle=100
#连接池最大阻塞等待时间(使用负值表示没有限制)
redis.pool.max.wait=-1
# 连接池中的最小空闲连接
redis.pool.min.idle=0
# 连接超时时间(毫秒)
redis.timeout=0

新建一个redis相关的provider,用于redis配置

package com.example.provider;import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.name.Named;
import com.yingda.xsignal2.util.redis.RedisExtendClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedisPool;import java.util.Arrays;
import java.util.Objects;/*** @author xiaofeng* @version V1.0* @title: RedisClientProvider* @package: com.example.provider* @description: TODO* @date 2018/6/25 17:23*/
public class RedisClientProvider implements Provider<RedisExtendClient> {Logger logger = LoggerFactory.getLogger(getClass());@Inject@Named("redis.database")private Integer database;@Inject@Named("redis.host")private String host;@Inject@Named("redis.port")private Integer port;@Inject@Named("redis.password")private String password;@Inject@Named("redis.pool.max.active")private Integer maxActive;@Inject@Named("redis.pool.max.idle")private Integer maxIdle;@Inject@Named("redis.pool.max.wait")private Integer maxWait;@Inject@Named("redis.pool.min.idle")private Integer minIdle;@Inject@Named("redis.timeout")private Integer timeout;private static ShardedJedisPool shardedPool;private ShardedJedisPool getJedisPool() {if (Objects.isNull(shardedPool)) {JedisPoolConfig config = new JedisPoolConfig();config.setMaxTotal(this.maxActive);config.setMaxWaitMillis(this.maxWait);config.setMaxIdle(this.maxIdle);config.setMinIdle(this.minIdle);JedisShardInfo info = new JedisShardInfo(this.host, this.port.intValue(),this.timeout.intValue());if (this.password != null && !this.password.isEmpty()) {info.setPassword(password);}shardedPool = new ShardedJedisPool(config, Arrays.asList(new JedisShardInfo[]{info}));} else {logger.error("initialze operate error,please waitting.....");return shardedPool;}return shardedPool;}@Overridepublic RedisExtendClient get() {return new RedisExtendClient(getJedisPool());}
}

新建一个module,用于绑定相关依赖关系

package com.example.module;import com.example.provider.RedisClientProvider;
import com.example.utils.PropertyUtil;
import com.google.inject.AbstractModule;
import com.google.inject.Scopes;
import com.google.inject.name.Names;
import com.yingda.xsignal2.util.redis.RedisExtendClient;/*** @author xiaofeng* @version V1.0* @title: RollbackModule* @package: com.example.module* @description: TODO* @date 2018/6/25 17:40*/
public class RollbackModule extends AbstractModule {private String file = "config/app.properties";@Overrideprotected void configure() {//绑定配置属性Names.bindProperties(binder(), PropertyUtil.loadFile(file, getClass()));
//        bind(Config.class).toProvider(ConfigProvider.class);//绑定redisbind(RedisExtendClient.class).toProvider(RedisClientProvider.class).in(Scopes.SINGLETON);}}

用于读取配置文件的util工具

package com.example.utils;import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;/*** @author xiaofeng* @version V1.0* @title: PropertyUtil* @package: com.example.utils* @description: 加载配置文件* @date 2018/6/25 17:15*/
public class PropertyUtil {/*** 读取配置文件属性** @param prefix* @param cla* @return*/public static Properties loadFile(String prefix, Class<?> cla) {String fileName = prefix;Properties prop = new Properties();InputStream in = null;try {in = cla.getResource("/" + fileName).openStream();prop.load(in);} catch (IOException e) {e.printStackTrace();}return prop;}
}

主函数入口类

package com.example;import com.example.module.RollbackModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.yingda.xsignal2.util.redis.RedisExtendClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** @author xiaofeng* @version V1.0* @title: MyApplication* @package: com.example* @description: TODO* @date 2018/6/25 17:40*/
public class MyApplication {private Logger logger = LoggerFactory.getLogger(getClass());private Injector injector;private RedisExtendClient redisExtendClient;private MyApplication() {logger.info("init something......");injector = Guice.createInjector(new RollbackModule());redisExtendClient = injector.getInstance(RedisExtendClient.class);}private void run() {logger.info("to do something......");redisExtendClient.set("test_guice","test_guice");}public static void main(String[] args) {MyApplication app = new MyApplication();try {app.run();} catch (Exception e) {e.printStackTrace();}}
}

最后启动程序,通过redis客户端工具查看是否已生成相关key

至此,我们的第一个guice项目已经完成!

Guice使用入门以及整合Redis相关推荐

  1. 深入理解 Redis Template及4种序列化方式__spring boot整合redis实现RedisTemplate三分钟快速入门

    概述 使用Spring 提供的 Spring Data Redis 操作redis 必然要使用Spring提供的模板类 RedisTemplate, 今天我们好好的看看这个模板类 . RedisTem ...

  2. redis入门——Spring整合篇

    redis入门--Spring整合篇 @(Redis)[服务器, 连接池, 集群, jedis, spring] redis入门Spring整合篇 Spring整合Redis redis整合分析 编写 ...

  3. Spring boot整合Redis(入门教程)

    目录 源码分析 jedis VS lettuce 整合测试 导入依赖 配置连接 测试 存入字符串 存入对象 五大数据类型操作 自定义RedisConfig 存入对象 Redis工具类(常用API) 以 ...

  4. SpringBoot整合Redis入门

    Spring Boot 整合 Redis简单实现 下面就按照步骤来配置一个Spring Boot整合Redis的实现. 问题~!在创建User实体的时候为什么没有使用序列化接口? 这个问题在使用Red ...

  5. SpringBoot第九篇: springboot整合Redis

    这篇文章主要介绍springboot整合redis,至于没有接触过redis的同学可以看下这篇文章:5分钟带你入门Redis. 引入依赖: 在pom文件中添加redis依赖: <dependen ...

  6. SpringBoot2.x整合Redis实战 4节课

    1.分布式缓存Redis介绍      简介:讲解为什么要用缓存和介绍什么是Redis,新手练习工具 1.redis官网 https://redis.io/download           2.新 ...

  7. 浅谈SpringBoot的基本概念与简单的使用与yml文件的基本使用, 整合Redis,整合MyBatis

    SpringBoot 什么是SpringBoot SpringBoot提供了一种快速使用Spring的方式,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到 ...

  8. spring boot 1.5.4 整合redis、拦截器、过滤器、监听器、静态资源配置(十六)

    上一篇:spring boot 1.5.4 整合webService(十五) 1      Spring Boot整合redis和缓存 Spring Boot中除了对常用的关系型数据库提供了优秀的自动 ...

  9. 【日常】SpringBoot缓存注解器及整合redis实现(附近期一些python零碎的内容)

    序言 似乎灵感枯竭了,完全不知道该写些什么东西,非常的痛苦,决定走读博这条路之后就失去了很多乐趣,总是想应该积累更多的论文和相关项目代码量,但是效率却总是很低,需要应付课程与考试,一篇paper的阅读 ...

最新文章

  1. crontab+php-cgi/php 定时执行PHP脚本
  2. 【Linux】一步一步学Linux——wait命令(216)
  3. Object类和常用的API
  4. angularjs1-5,class,
  5. VNCServer在Linux下设置
  6. 《Pytorch - CNN模型》
  7. 【原创】k8s源代码分析-----kubelet(3)ContainerGC
  8. 论文赏析[ACL17]一个最小化的基于跨度的神经句法分析器
  9. php ajax跨域cookies,解决ajax跨域请求数据cookie丢失问题
  10. 比特率 波特率 带宽与容量
  11. 在线pdf转word
  12. 在Centos7上配置docker运行DotNetCore项目
  13. paip.c++ gcc 不能捕获exception异常的解决
  14. Google Earth Engine(GEE)——获取RSEI各组成指数(ndvi\lst\wet\ndbsi)的各部分的逐年影像下载
  15. 使用ArcGIS实现WGS84经纬度坐标到北京54高斯投影坐标的转换
  16. VB 连接加密码的ACCESS数据库*.mdb,*.accdb
  17. 用了这些软件,写代码有了飞一般的速度
  18. 学计算机基础的重要性,浅谈学习计算机基础知识的重要性.pdf
  19. 从NAACL2021到ACL2022:两个信息抽取SOTA的比较分析(PURE vs PL-Marker)
  20. response.setHeader()方法设置http文件头的值

热门文章

  1. elasticsearch id查询_互联网公司中对【Elasticsearch】的真实应用案例
  2. TF从文件中读取数据
  3. 外媒称新浪面临与雅虎一样的问题 或被阿里廉价收购
  4. 微信小程序把玩(二十一)switch组件
  5. CCF NOI1035 数根
  6. wordpress安装及使用
  7. .NET正则表达式使用高级技巧之替换类
  8. 微型计算机及接口技术笔记,微机原理与接口技术笔记(一)
  9. Ubuntu 源列表
  10. Ubuntu 安装 Tomcat 7.0.40