@Bean注解的配置方法中使用new关键字
来源:2-6 集成redis中

慕侠935299
2020-01-09
老师我在配置JedisPool的过程中有这样一行代码
@Bean
public JedisPool jedisPool() {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(redisConfig.getMaxIdle());
jedisPoolConfig.setMaxWaitMillis(redisConfig.getMaxWait() * 1000);
jedisPoolConfig.setMaxTotal(redisConfig.getMaxActive());
//使用了new关键字
JedisPool jedisPool = new JedisPool(jedisPoolConfig, redisConfig.getHost(), redisConfig.getPort()
, redisConfig.getTimeout() * 1000);
return jedisPool;
}
问题一:@Bean注解中使用new关键字可以吗?
我了解到的Ioc加载顺序是:成员变量->构造函数->@AutoWired
可是,我在RedisService中注入JedisPool的时候,却出现了空指针异常
debug图
@Bean配置的debug显示配置成功
出现这种情况问题可能会出在哪啊
写回答
2回答
-
(1)@Bean注解中可以使用new关键字
(2)代码不全,看不出来啥问题
022020-01-10 -
慕侠935299
提问者
2020-01-09
我对排查问题的是否将JedisPool读取到spring容器中时,写了一个上下文工具类
@Component public class SpringUtil implements ApplicationContextAware { private static ApplicationContext applicationContext = null; //获取applicationContext public static ApplicationContext getApplicationContext() { return applicationContext; } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { if (SpringUtil.applicationContext == null) { SpringUtil.applicationContext = applicationContext; } } //通过name获取 Bean public static Object getBean(String name) { return getApplicationContext().getBean(name); } }
然后尝试使用上下文,getBean()方法获取JedisPool,从debug的结果看到配置连接池与yml文件中配置的一致。所以我觉得这个jedisPool是读入到了ioc容器当中的
可是,使用@Autowired仍然不行
所以,老师,存不存在是因为JedisPool使用的第三方jar与我自己写的@Bean配置的有冲突,导致的@Autowired不成功呢
012020-01-13
相似问题