在 Spring MVC 中将 Bean 放入控制器的问题
Posted
技术标签:
【中文标题】在 Spring MVC 中将 Bean 放入控制器的问题【英文标题】:Issue getting Bean into a Controller in Spring MVC 【发布时间】:2014-10-14 21:57:35 【问题描述】:在 Spring MVC 中,我有这个 models.UserDAO
类:
@Repository
@Transactional
public class UserDAO implements UserDetailsService
@Autowired
private SessionFactory _sessionFactory;
private Session getSession()
return _sessionFactory.getCurrentSession();
public void save(User user)
getSession().save(user);
return;
public User getById(long id)
return (User) getSession().load(User.class, id);
@Override
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException
// implementation
// ...
// class UserDAO
还有这个controllers.UserController
类:
@Controller
public class UserController
@Autowired
private ApplicationContext _appContext;
@RequestMapping(value="/users/create")
@ResponseBody
public String create(@RequestBody User user)
// ...
UserDAO userDao = _appContext.getBean(UserDAO.class);
userDao.save(user);
// ...
// class UserController
到目前为止一切正常:用户已通过 UserDAO 保存方法正确保存在数据库中。
现在我实现了另一个控制器controllers.MainController
:
@Controller
public class MainController
@Autowired
private ApplicationContext _appContext;
@RequestMapping(value="/user")
public String profile()
// ...
UserDAO userDao = _appContext.getBean(UserDAO.class);
// ...
// class MainController
在后一个控制器中,我在获取 Bean 时出错:No qualifying bean of type [myproject.models.UserDAO] is defined
可能是我获取 bean 的方式错误?:
_appContext.getBean(UserDAO.class);
编辑
我试图在我的 JavaConfig 中添加这个:
@Bean
public UserDAO userDao()
return new UserDAO();
我用 UserDAO 注入替换了 ApplicationContext _appContext
autowired:
@Autowired
private UserDAO userDao;
但现在我收到此错误:
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mainController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private myproject.models.UserDAO myproject.controllers.MainController.userDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [myproject.models.UserDAO] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: @org.springframework.beans.factory.annotation.Autowired(required=true)
【问题讨论】:
您能发布一下您的 Spring 配置是什么样的吗? 见这里:gist.github.com/anonymous/70649891d5869bfbee11 【参考方案1】:您是否在 beans.xml 中设置了 UserDAO 类(或等效的 JavaConfig 类取决于您在应用程序中使用的类)?
为什么不将 UserDAO 实例本身注入控制器?在我看来,您目前正在应用服务定位器(反)模式。
【讨论】:
您可以在这里找到更多信息:***.com/questions/812415/… 在我尝试您的建议的第一篇文章中查看我的编辑。 @andre 我希望包扫描没问题,两个控制器都在同一个包中 @ankur-singhal 谢谢,我如何检查包裹扫描是否正常? 我正在使用 Spring Boot 和 JavaConfig(所以我没有 context.xml 文件)以上是关于在 Spring MVC 中将 Bean 放入控制器的问题的主要内容,如果未能解决你的问题,请参考以下文章
springboot 开发中将 bean 放入容器 你知道的有几种方式?