采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师,我在util文件下 @Autowired private JedisUtil.Keys jedisKeys; 我发现jedisKeys是空的,但是我在service文件下写,我发现是获取到的,这个为什么呢。
同学好,如果是springboot的话,不能这么定义的呢,毕竟你bean的名字并没有叫做JedisUtil.Keys,所以@Autowired找不到对应的bean,你可以参考我的进行定义
package com.imooc.o2o.config.redis; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.imooc.o2o.cache.JedisPoolWriper; import com.imooc.o2o.cache.JedisUtil; import redis.clients.jedis.JedisPoolConfig; /** * spring-redis.xml里的配置 * * @author xiangze * */ @Configuration public class RedisConfiguration { @Value("${redis.hostname}") private String hostname; @Value("${redis.port}") private int port; @Value("${redis.pool.maxActive}") private int maxTotal; @Value("${redis.pool.maxIdle}") private int maxIdle; @Value("${redis.pool.maxWait}") private long maxWaitMillis; @Value("${redis.pool.testOnBorrow}") private boolean testOnBorrow; @Autowired private JedisPoolConfig jedisPoolConfig; @Autowired private JedisPoolWriper jedisWritePool; @Autowired private JedisUtil jedisUtil; /** * 创建redis连接池的设置 * * @return */ @Bean(name = "jedisPoolConfig") public JedisPoolConfig createJedisPoolConfig() { JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); // 控制一个pool可分配多少个jedis实例 jedisPoolConfig.setMaxTotal(maxTotal); // 连接池中最多可空闲maxIdle个连接 ,这里取值为20, // 表示即使没有数据库连接时依然可以保持20空闲的连接, // 而不被清除,随时处于待命状态。 jedisPoolConfig.setMaxIdle(maxIdle); // 最大等待时间:当没有可用连接时, // 连接池等待连接被归还的最大时间(以毫秒计数),超过时间则抛出异常 jedisPoolConfig.setMaxWaitMillis(maxWaitMillis); // 在获取连接的时候检查有效性 jedisPoolConfig.setTestOnBorrow(testOnBorrow); return jedisPoolConfig; } /** * 创建Redis连接池,并做相关配置 * * @return */ @Bean(name = "jedisWritePool") public JedisPoolWriper createJedisPoolWriper() { JedisPoolWriper jedisPoolWriper = new JedisPoolWriper(jedisPoolConfig, hostname, port); return jedisPoolWriper; } /** * 创建Redis工具类,封装好Redis的连接以进行相关的操作 * * @return */ @Bean(name = "jedisUtil") public JedisUtil createJedisUtil() { JedisUtil jedisUtil = new JedisUtil(); jedisUtil.setJedisPool(jedisWritePool); return jedisUtil; } /** * Redis的key操作 * * @return */ @Bean(name = "jedisKeys") public JedisUtil.Keys createJedisKeys() { JedisUtil.Keys jedisKeys = jedisUtil.new Keys(); return jedisKeys; } /** * Redis的Strings操作 * * @return */ @Bean(name = "jedisStrings") public JedisUtil.Strings createJedisStrings() { JedisUtil.Strings jedisStrings = jedisUtil.new Strings(); return jedisStrings; } }
老师,如果在静态static方法里面就无法获取到,在静态方法里面怎么获取呢
同学可以看看这个 https://blog.csdn.net/mononoke111/article/details/81088472 这个是static的获取方式
老师我是这么写的,但还是报了空指针错误,一时想不明白,还请老师指点下 @Component public class StrongCrawler { private static JedisUtil.Strings jedisStrings; @Autowired public void setJedisStrings(JedisUtil.Strings jedisStrings) { this.jedisStrings = jedisStrings; } public static void main(String[] args) { try { jedisStrings.set("xx", "xx"); } catch (Exception e) { e.printStackTrace(); } } }
老师,我用的是springboot写的,我看配置文件RedisConfiguration并没有扫描package,我的理解是@Configuration就会自动注入spring容器,那么在util 文件类下使用
@Autowired private
JedisUtil.Keys jedisKeys;
应该能获取到才对,这让我感觉困惑,如果像老师说的package没扫描到,那我应该怎么做才能获取到,当然我目前解决方法是在servcie把jedisKeys当参数传过来使用,我想了解原理,请老师再解答下。
同学好,主要看你的对应的package是否被扫描到了,没扫描到的话不会注入呢
登录后可查看更多问答,登录/注册
SSM商铺V1.0,解决毕设痛点;SpringBoot商铺V2.0,满足工作刚需
1.9k 47
1.8k 41
2.5k 40
1.8k 39
1.5k 37