@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回答

若鱼1919

2020-01-09

(1)@Bean注解中可以使用new关键字

(2)代码不全,看不出来啥问题

0
2
慕侠935299
非常感谢!
2020-01-10
共2条回复

慕侠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容器当中的

//img.mukewang.com/szimg/5e172db809914dba03160138.jpg

//img.mukewang.com/szimg/5e172d5f0995dcbf09640378.jpg

可是,使用@Autowired仍然不行

//img.mukewang.com/szimg/5e172e53094891ef05150062.jpg

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

0
1
若鱼1919
这个不好猜
2020-01-13
共1条回复

Java秒杀系统方案优化 掌握海量访问通用解决方案

各种缓存/JSR303参数检

2695 学习 · 941 问题

查看课程