繁体   English   中英

在Spring MVC中将Bean放入控制器的问题

[英]Issue getting Bean into a Controller in Spring MVC

在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

我得到豆子的方式可能是错误吗?:

_appContext.getBean(UserDAO.class);

编辑

我试图将其添加到我的JavaConfig中:

@Bean
public UserDAO userDao(){
  return new UserDAO();
}

我用UserDAO注入替换了自动装配的ApplicationContext _appContext

@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)}
  1. 您是否已在bean.xml中设置了UserDAO类(或等效的JavaConfig类取决于您在应用程序中使用的类)?

  2. 为什么不将UserDAO实例本身注入到控制器中? 在我看来,您当前正在应用服务定位器(反)模式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM