RedisUtil工具类
@Component
public class RedisUtil {
private RedisTemplate<String, Object> redisTemplate;
public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {
this.redisTemplate = redisTemplate;
}
//=============================common============================
/**
* 指定缓存失效时间
* @param key 键
* @param time 时间(秒)
* @return
*/
// public boolean expire(String key,long time){
public boolean setTime(String key,long time){
try {
// if(time>0){
redisTemplate.expire(key, time, TimeUnit.SECONDS);
// }
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
在spring.xml文件中虽然将Util包下的所有文件进行了扫描注入每一个Bean,但是Spring并没有将工具栏中使用到的类注入到Spring容器,就是说ResidUtil中:
@Resource
private RedisTemplate<String, Object> redisTemplate;
这一段代码**RedisTemplate<String, Object>**的类是不存在的,使用@Resource是获取不到Bean对象的,它并不存在Spring容器当中,控制台输出
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'registerService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.data.redis.core.RedisTemplate<java.lang.String, java.lang.Object>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@javax.annotation.Resource(shareable=true, lookup=, name=, description=, authenticationType=CONTAINER, type=class java.lang.Object, mappedName=)}
至少需要又一个RedisTemplate<java.lang.String, java.lang.Object>’对象实例。配置文件扫到的只是RedisUtil这个我们自己创建的类,类中使用到的Redis操作模板需要手动注入到Spring容器当中,spring.xml文件
<!--redis操作模版,使用该对象可以操作redis -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="jedisConnectionFactory" />
<!-- 配置Serializer -->
<property name="keySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="valueSerializer">
<bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer" />
</property>
<property name="hashKeySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="hashValueSerializer">
<bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer" />
</property>
<!--开启事务 -->
<property name="enableTransactionSupport" value="true" />
</bean>
如此,在RedisUtil工具类中就能获取到RedisTemplate实例。微信短信原来是一样的。需要在配置文件中手动讲Bean注入进Spring容器
<!-- 腾讯云短信服务 - 单发 -->
<bean class="com.github.qcloudsms.SmsSingleSender">
<constructor-arg name="appid" value="" />
<constructor-arg name="appkey" value="" />
</bean>
开发中对Spring注入不够深入了解才忽略了基础的注入依赖问题。
版权声明:本文为weixin_42571004原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。