Springboot bean注入 ---- Jedis注入

一、在springmvc中我们注入bean使用了xml方式,如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">

    <!--RedisDao-->
    <bean id="redisDao" class="com.mangues.cache.RedisDao">
        <constructor-arg index="0" value="${redis.ip}"/>
        <constructor-arg index="1" value="${redis.port}"/>
        <constructor-arg index="2" value="500"/>
        <constructor-arg index="3" value="5"/>
        <constructor-arg index="4" value="${redis.timeout}"/>
    </bean>

</beans>

RedisDao代码:

public class RedisDao {
    private final Logger logger = LoggerFactory.getLogger(getClass());
    private final JedisPool jedisPool;
    public RedisDao(String ip, int port, int maxTotal, int maxIdle, long waitMill){

        JedisPoolConfig config = new JedisPoolConfig();
        //控制一个pool可分配多少个jedis实例,通过pool.getResource()来获取;
        //如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
        config.setMaxTotal(maxTotal);
        //控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。
        config.setMaxIdle(maxIdle);
        //表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;
        config.setMaxWaitMillis(waitMill);
        //在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
        config.setTestOnBorrow(true);

        jedisPool = new JedisPool(config,ip,port);
    }

    public <T> T getBean(String key,Class<T> targetClass){
        try {
            Jedis jedis = jedisPool.getResource();
            try{
//               byte[] bytes =  jedis.get(key.getBytes());
               String bytes =  jedis.get(key);
                if (bytes!=null){
//                    T result = ProtoStuffSerializerUtil.deserialize(bytes, targetClass);
                    T result = JSON.parseObject(bytes,targetClass);
                    return result;
                }
            }finally {
                jedis.close();
            }
        }catch (Exception e){
            logger.error(JSON.toJSONString(e));
        }
        return null;
    }
}

使用的时候直接就可以使用了

  @Autowired
  private RedisDao redisDao;

二、在springboot我们可以使用bean注解来实现bean的注入

@Configuration
public class RedisDao{
    private final Logger logger = LoggerFactory.getLogger(getClass());
    private  JedisPool jedisPool;
    @Value("${spring.redis.ip}")
    private String ip;
    @Value("${spring.redis.port}")
    private int port;
    @Value("${spring.redis.maxTotal}")
    private int maxTotal;
    @Value("${spring.redis.maxIdle}")
    private int maxIdle;
    @Value("${spring.redis.waitMill}")
    private long waitMill;
    @Bean
    public RedisDao redisFactory(){
        JedisPoolConfig config = new JedisPoolConfig();
        //控制一个pool可分配多少个jedis实例,通过pool.getResource()来获取;
        //如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
        config.setMaxTotal(maxTotal);
        //控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。
        config.setMaxIdle(maxIdle);
        //表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;
        config.setMaxWaitMillis(waitMill);
        //在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
        config.setTestOnBorrow(true);

        jedisPool = new JedisPool(config,ip,port);
        return new RedisDao();
    }

    public <T> T getBean(String key,Class<T> targetClass){
        try {
            Jedis jedis = jedisPool.getResource();
            try{
//               byte[] bytes =  jedis.get(key.getBytes());
               String bytes =  jedis.get(key);
                if (bytes!=null){
//                    T result = ProtoStuffSerializerUtil.deserialize(bytes, targetClass);
                    T result = JSON.parseObject(bytes,targetClass);
                    return result;
                }
            }finally {
                jedis.close();
            }
        }catch (Exception e){
            logger.error("Exception",e);
        }
        return null;
    }

    public <T> String putBean(String key,T object){
       return putBean( key,object,60*60);
    }
}

代码都差不多 只要加入这连个注解就行了,spring 就会把new 的RedisDao注入到上下文中。

注意:bean注解的方法一定要是 **Factory 这种命名,不然会出错

    @Configuration
    public class RedisDao{
        ...
    }

    @Bean
    public RedisDao redisFactory(){
        ...
        return new RedisDao();
    }
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值