java – Spring MVC – 静态上下文中的Autowired Repository NullPointerException
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Spring MVC – 静态上下文中的Autowired Repository NullPointerException,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1684字,纯文字阅读大概需要3分钟。
内容图文
![java – Spring MVC – 静态上下文中的Autowired Repository NullPointerException](/upload/InfoBanner/zyjiaocheng/704/5174551374094a9aacf1c6bd166b12df.jpg)
在我的模型中,我有一个名为UserRepository的存储库.另外,我有一个UserFacade,基本上将用户添加到存储库,并由Controller访问.回购在门面是@Autowired.当我想添加一个新用户时,我得到了一个存储库的nullPointerException.
我的spring-servlet.xml包含必需的
< jpa:repositories base-package =“project.user.repositories”/>
而存储库是包含UserRepository.java的文件夹.它扩展了CrudRepository:
@Repository
public interface UserRepository extends CrudRepository<User, Long> {
User findByUsername(String username);
}
Facade.java是包含存储库的对象:
public class UserFacade {
@Autowired
private static UserRepository userRepo;
private static Logger logger = LoggerFactory.getLogger(UserFacade.class);
public UserFacade(){} //Thought it might work if I add a constructor and call it?
public static User findByUsername(String username) {
logger.debug(username+userRepo); // prints SomeStringnull
return userRepo.findByUsername(username); //NullPointerException
}
}
从我的控制器我有一个方法,如:
@RequestMapping(value = CONTEXT)
public String test(){
User user = UserFacade.findByUsername("get");
//obviously user will be null if there is no such user
return "success";
}
因为我使用Android Studio,导入不应该是一个问题.我错过了什么?
注意:相关问题有许多很好的答案(如this one),但每个都有自己的,不同的背景,并没有帮助我.
解决方法:
Spring不会自动装配静态字段.这就是userRepo字段为空的原因.一种方法是将UserFacade作为bean本身,然后您可以使userRepo成为非静态字段.我更喜欢这种方式. UserFacade实际上不应该是实用程序类,因为它与存储库bean交互.把它变成豆子会更有意义.
另一个选择是提供一个setter,并使用@Autowired:
@Autowired
public void setUserRepo(UserRepository userRepo) {
UserFacade.userRepo = userRepo;
}
或者甚至在参数化构造函数上使用它也可以.
内容总结
以上是互联网集市为您收集整理的java – Spring MVC – 静态上下文中的Autowired Repository NullPointerException全部内容,希望文章能够帮你解决java – Spring MVC – 静态上下文中的Autowired Repository NullPointerException所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。