gpt4 book ai didi

java - 在 Spring MVC 中将 Bean 放入 Controller 时出现问题

转载 作者:太空宇宙 更新时间:2023-11-04 14:37:10 24 4
gpt4 key购买 nike

在 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 save 方法正确保存在数据库中。

现在我实现了另一个 Controller controllers.MainController:

@Controller
public class MainController {

@Autowired
private ApplicationContext _appContext;

@RequestMapping(value="/user")
public String profile()
// ...

UserDAO userDao = _appContext.getBean(UserDAO.class);

// ...
}

} // class MainController

在后一个 Controller 中,我获取 Bean 时出错:未定义 [myproject.models.UserDAO] 类型的合格 bean

可能是我获取 bean 的方式出现错误吗?:

_appContext.getBean(UserDAO.class);
<小时/>

编辑

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

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

我用 UserDAO 注入(inject)替换了 Autowiring 的 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. 您是否在 beans.xml 中设置了 UserDAO 类(或等效的 JavaConfig 类,具体取决于您在应用程序中使用的类)?

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

关于java - 在 Spring MVC 中将 Bean 放入 Controller 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25423421/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com