spring 注入 redis.clients.jedis.JedisPool 异常

    一,异常信息:                 

             Superclass has no null constructors but no arguments were given

    二,版本信息:

             springframework:3.2.2
             jedis:2.3

    三,spring配置信息:

<!-- jedisPool配置信息 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
	<property name="maxTotal" value="1000"/> <!-- 控制一个pool可分配多少个jedis实例 -->
	<property name="maxIdle" value="200" />   <!-- 控制一个pool最多有多少个状态为idle(空闲)的jedis实例 -->
	<property name="maxWaitMillis" value="2000" />  <!-- 表示当borrow一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException -->
	<property name="testOnBorrow" value="true" /> <!-- 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的 -->
</bean>
<bean id="jedisPool" class="redis.clients.jedis.JedisPool" destroy-method="destroy">
        <constructor-arg ref="jedisPoolConfig" />  
        <constructor-arg value="127.0.0.1" />  
        <constructor-arg type="int" value="6379" />  
</bean>

        1,异常原因分析:

               具体分析请看这儿

               按照上面分析:对于没有实现接口的类,spring使用CGLIB来实现代理。目标类必须要有默认的无参构造函数。JedisPool类,确实没有无参的构造函数。为了解决这个问题,我包装了JedisPool类,新建JedisPoolWriper类:

public class JedisPoolWriper{

	private static Logger logger= Logger.getLogger(JedisPoolWriper.class);
	private  JedisPool jedisPool = null;
	
    public JedisPoolWriper(final JedisPoolConfig poolConfig,final String host,final int port){
    	try{
			jedisPool = new JedisPool(poolConfig,host,port);
		}catch(Exception e){
			logger.error("Jedis Pool init failed:", e);
		}
	}
}

              这个新生成的包装类,同样没有默认的无参构造函数,spring成功构造注入。对于这个问题,没有进一步跟踪。不知道是不是JedisPool继承了抽象类Pool影响的,如若被哪位兄弟解决了,做个好事儿,告知我呗。

             包装类注入:

<bean id="jedisWritePool" class="com.hidata.framework.cache.redis.JedisPoolWriper" destroy-method="destroy"  depends-on="jedisPoolConfig">
	<constructor-arg name="poolConfig" ref="jedisPoolConfig" /> <!-- 加载jedisPool配置信息 -->
	<constructor-arg name="host" value="114.111.162.219" /><!-- redis主机地址 -->
	<constructor-arg name="port" value="6379"/> <!-- redis连接端口 -->
</bean>






  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值