首页 > 解决方案 > 即使正确配置了@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。

标签: springhibernatespring-mvcspring-bootstruts2

解决方案


您的Component-Scan设置是否正确地扫描给定路径内的包?尝试component-scanspring xml configuration扫描相关包中设置如下:

<context:component-scan base-package="com.main"/> 

您的dao,servicecontroller包 位于com.main. com.main这将在检查 bean 定义时扫描所有文件。


推荐阅读