spring是否不能直接注入jedispool

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring是否不能直接注入jedispool相关的知识,希望对你有一定的参考价值。

参考技术A

spring是不能直接注入jedispool作为一个静态变量的


<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">

<property name="maxIdle" value="200" />

<property name="maxTotal" value="500" />

<property name="maxWaitMillis" value="60000" />

<property name="testOnBorrow" value="false" />

</bean>

<!-- redis单机 通过连接池 -->

<bean id="jedisPool" class="redis.clients.jedis.JedisPool"  destroy-method="close" depends-on="poolConfig">

<constructor-arg name="poolConfig" ref="poolConfig" />

<constructor-arg name="host" value="XXXXXXX" />

<constructor-arg name="port" value="XXXX" />

<constructor-arg name="timeout" value="6000" />

<constructor-arg name="password" value="XXXXXX"/>

</bean>

配置是没有问题的 ,是可以依赖注入的,  但是如果是注入的对象是静态的就不可以

@Autowired

public static JedisPool jedisPool; 

这么用是错误的 

我是在工具类中这么使用 jedisPool 是不对的

后来我就是把jedisPool作为参数传进我的工具类方法中了  

spring是无法依赖注入一个静态变量

http://blog.csdn.net/randyfeng007/article/details/45330793

Spring不支持依赖注入static静态变量

我不知道你们是不是这个问题导致的,  如果不是请略过 。

不知道楼主的问题是什么 ,解决了没有,可以分享一下 谢谢!

Spring依赖注入详解

1.set注入

 

 启动容器后看看到底能不能拿到teacherService的值。可以看到拿到了值。我们具体来分析怎么注入的

 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#populateBean

发现pvs里面有一个我们自己set的值 

 

直接进行属性赋值。

org.springframework.beans.factory.support.BeanDefinitionValueResolver#resolveValueIfNecessary

org.springframework.beans.factory.support.BeanDefinitionValueResolver#resolveReference

直接从容器中获取,然后进行属性赋值

 

 真正进行属性赋值:

 org.springframework.beans.AbstractPropertyAccessor#setPropertyValues(org.springframework.beans.PropertyValues, boolean, boolean)

问题1:如果set方法乱写可以注入吗?

 不行,会报错,我们看看具体在哪里报错

 

org.springframework.beans.AbstractNestablePropertyAccessor#setPropertyValue(org.springframework.beans.AbstractNestablePropertyAccessor.PropertyTokenHolder, org.springframework.beans.PropertyValue)

这里会报错

 

 会将set后面的方法去掉set,然后首字母小写放入缓存中,来获取对应的注入值,如果找不到直接报错。

如果是这样会报错吗?不会,底层拿到set方法然后进行反射,故set方法和注入的属性一直就不会报错。

 

如下就不会报错:

 

 

以上是关于spring是否不能直接注入jedispool的主要内容,如果未能解决你的问题,请参考以下文章

Spring不能直接@autowired注入Static变量问题和解决方案

在Servlet中可访问Spring bean对象,但是不能直接以注入的方式引用

Spring依赖注入详解

Spring注解注入

@Value注入失败的问题

spring学习——注入静态对象属性