请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

@Bean注解的配置方法中使用new关键字

老师我在配置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)代码不全,看不出来啥问题

0 回复 有任何疑惑可以回复我~
  • 提问者 慕侠935299 #1
    恩,谢谢老师
    回复 有任何疑惑可以回复我~ 2020-01-09 20:09:18
  • 提问者 慕侠935299 #2
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-01-10 17:34:07
提问者 慕侠935299 2020-01-09 21:47:19

我对排查问题的是否将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容器当中的

https://img1.sycdn.imooc.com//szimg/5e172db809914dba03160138.jpg

https://img1.sycdn.imooc.com//szimg/5e172d5f0995dcbf09640378.jpg

可是,使用@Autowired仍然不行

https://img1.sycdn.imooc.com//szimg/5e172e53094891ef05150062.jpg

所以,老师,存不存在是因为JedisPool使用的第三方jar与我自己写的@Bean配置的有冲突,导致的@Autowired不成功呢

0 回复 有任何疑惑可以回复我~
  • 这个不好猜
    回复 有任何疑惑可以回复我~ 2020-01-13 09:09:19
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号