Spring注入Redis工具类及微信短信模板。

  • Post author:
  • Post category:其他


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 版权协议,转载请附上原文出处链接和本声明。