Spring的注入和SpringMVC的注入有什么不同?

各位前辈,我现在在初学redis,用了RedisTemplate。配置如下:

@Bean
public static  RedisConnectionFactory redisConnectionFactory(){
    JedisConnectionFactory factory = new JedisConnectionFactory();
    factory.setPort(6379);
    factory.setHostName("127.0.0.1");
    factory.afterPropertiesSet();
    return factory;
}
@Bean
public static RedisTemplate redisTemplate(RedisConnectionFactory factory){
    RedisTemplate<String, Object> template = new RedisTemplate();
    template.setConnectionFactory(factory);
    template.afterPropertiesSet();
    return template;
}

在新的项目springboot环境中的启动类里面有main方法。由于main是静态方法,我只能这样注入redisTemplate:

private static RedisTemplate template;
@Autowired
public TestapiApplication(RedisTemplate redisTemplate) {
    this.template = redisTemplate;
}
public static void main(String[] args) {
    SpringApplication.run(TestapiApplication.class, args);
    //....
}

redisTemplate可以运行成功。
我就在自己的Web项目中写了一个配置类RedisConfid.java以及一个工具类RedisUtil.java。其中工具类的静态方法test方法就是上述main方法的内容,在某个controller里面直接使用工具类的静态方法,运行的时候报redisTemplate空指针的错误。
我想问问各位前辈,一样的环境为什么Web下会出现空指针?

阅读 3k
1 个回答

说几点:

  1. Bean注解表示该方法返回一个Bean交给Spring容器来管理,如果你的配置类RedisConfid.java里面包含这两个Bean注解的方法,需要加上@Configuration注解。
  2. "其中工具类的静态方法test方法就是上述main方法的内容",你确定你把SpringApplication.run(TestapiApplication.class, args);这玩意放到工具类的test方法里了?如果是这样,我不明白你调用这个run方法有什么意义。你应该去了解一下SpringBoot的启动方法也就是这个run方法干了什么事.
  3. 我理解的工具类应该是封装了一下对redis的操作,大概是这样子:
@Component
pubic class RedisUtil{

@Autowired
private RedisTemplate redisTemplate;

public void test(){
    redisTemplate.xxxx
}

}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题