调用SqlServer时JdbcTemplate抛出NullPointerException问题求助
问题根因
空指针异常和数据库连接配置、SQL语句无关,核心原因是手动实例化业务类导致Spring依赖注入完全失效。
你在Controller层通过new Implementation()手动创建了业务实现类的对象,这个对象不归Spring容器管理,类内部标记了@Autowired的jdbcTemplate属性不会被注入,始终为null,调用jdbcTemplate.query()方法时就会触发空指针,和报错栈的行号指向完全匹配。
修复步骤
- 第一步:给业务实现类加上Spring组件注解,让它被Spring容器托管
@Service // 增加这个注解标记为业务层Bean public class Implementation { @Autowired private JdbcTemplate jdbcTemplate; public List<User> getSomething(){ return jdbcTemplate.query("SELECT * FROM users", BeanPropertyRowMapper.newInstance(User.class)); } }
- 第二步:删除Controller里手动new业务对象的代码,同样通过依赖注入获取Spring管理的业务类实例
@RestController public class Controller { // 替换原来的手动new写法,用注入方式获取实例 @Autowired private Implementation implementation; @GetMapping("/something") public List<User> something(){ return implementation.getSomething(); } }
注意:所有需要使用Spring依赖注入能力的对象,都不能通过手动new的方式创建,手动实例化的对象脱离Spring容器管控,类内所有
@Autowired、@Resource等注入标记都不会生效。
- 补充说明:你贴的application.properties数据源配置格式正确,SpringBoot会根据配置自动创建数据源、完成JdbcTemplate的自动装配,不需要额外手动编写JdbcTemplate的配置类。
内容的提问来源于stack exchange,提问作者zasaz
相关产品推荐
相关产品推荐

