spring - 即使正确配置了@Autowire 和@repository @service,也会引发NoSuchBeanDefinitionException
问题描述
我的控制器类:
@Controller
public class UsersController
{
@Autowired
TechRequestService techrequestservices;
@RequestMapping(value="/service_request", method=RequestMethod.POST)
public @ResponseBody Map<String,Object> SaveServiceRequest(@Valid Servicerequest servicerequest,BindingResult result){
Map<String,Object> map = new HashMap<String,Object>();
Object obj=new Object();
if(result.hasErrors())
{
for (Object object : result.getAllErrors()) {
if(object instanceof FieldError) {
FieldError fieldError = (FieldError) object;
obj= (fieldError.getDefaultMessage());
}
map.put("status","400");
map.put("message",obj);
return map;
}}
techrequestservices.save_servicerequest(servicerequest);
map.put("status","200");
map.put("message","Your record have been saved successfully");
return map;
}
}
我的服务实现类:
@Service
public class TechRequestServiceImpl implements TechRequestService{
@Autowired
TechRequestServiceDao techrequestservicedao;
public boolean save_servicerequest(Servicerequest servicerequest) {
return techrequestservicedao.save_servicerequest(servicerequest);
}
public List<Servicerequest> list() {
// TODO Auto-generated method stub
return techrequestservicedao.list();
}
}
我的 DaoImpl 类:
@Repository
@Transactional
public class TechRequestServiceDaoImpl implements TechRequestService {
@Autowired
SessionFactory session;
@Override
public boolean save_servicerequest(Servicerequest servicerequest) {
// TODO Auto-generated method stub
session.getCurrentSession().saveOrUpdate(servicerequest);
return true;
}
@Override
public List<Servicerequest> list() {
return session.getCurrentSession().createQuery("from Search_type_case").list();
}
}
该请求来自ajax,并且pojo变量正在正确初始化它们的值,因为我通过在pojos的ever setter方法中放置一个打印语句来确认它。异常的完整堆栈跟踪如下:
SEVERE: Exception sending context initialized event to listener instance of class
[org.springframework.web.context.ContextLoaderListener] org.springframework.beans.factory.BeanCreationException:创建名为“usersController”的bean时出错:注入自动装配的依赖项失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法自动装配字段:com.servicesapi.TechRequestService com.controllers.UsersController.techrequestservices;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名为“techRequestServiceImpl”的 bean 时出错:注入自动装配的依赖项失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法自动装配字段:com.daoapi.TechRequestServiceDao com.servicesimpl.TechRequestServiceImpl.techrequestservicedao;嵌套异常是 org.springframework。beans.factory.NoSuchBeanDefinitionException:没有为依赖项找到类型为 [com.daoapi.TechRequestServiceDao] 的合格 bean:预计至少有 1 个 bean 有资格作为此依赖项的自动装配候选者。依赖注释: org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334) 中的 {@org.springframework.beans.factory.annotation.Autowired(required=true)}。 factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory。
解决方案
您的Component-Scan
设置是否正确地扫描给定路径内的包?尝试component-scan
在spring xml configuration
扫描相关包中设置如下:
<context:component-scan base-package="com.main"/>
您的dao
,service
和controller
包 位于com.main
. com.main
这将在检查 bean 定义时扫描所有文件。
推荐阅读
- html - Bootstrap 4 - 使表头具有粘性
- shell - 删除 cron 作业及其评论,由 Puppet 通过 awk/sed 创建的环境
- java - 使用 java 返回错误序列化 Avro 消息
- angular - webpack“找不到命名空间'DataTables'”的角度SSR问题
- c# - Xamarin.Essentials.NotImplementedInReferenceAssemblyException
- c++ - boost::stacktrace 无法提供行号
- java - 如何使用firebase auth将两种类型的用户重定向到Anroid studio中的不同活动
- assembly - 如何将键盘输入保存到程序集中的寄存器中?
- sql - SQL 变量/命令?
- c - 变量持有的可能值