首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在回弹时找不到某种类型的豆子

在回弹时找不到某种类型的豆子
EN

Stack Overflow用户
提问于 2018-07-18 13:34:37
回答 3查看 3.6K关注 0票数 1

在我开始之前,请假定pom.xml是完美的。

话虽如此,我们还是继续吧,

我得到的错误如下:

申请启动失败* 字段empDao in com.sagarp.employee.EmployeeService 需要一个无法找到的'com.sagarp.employee.EmployeeDao‘类型的bean。

现在,spring boot application类如下所示:

代码语言:javascript
运行
复制
package com.sagarp;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@EnableEurekaClient //this is for eureka which not our concern right now.
@ComponentScan(basePackages = "com.sagarp.*") //Included all packages
public class EmployeeHibernateApplication {

    public static void main(String[] args) {
        SpringApplication.run(EmployeeHibernateApplication.class, args);
    }
}

EmployeeService类如下所示:

代码语言:javascript
运行
复制
package com.sagarp.employee;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class EmployeeService {

    @Autowired
    private EmployeeDao empDao; // interface

    public EmployeeDao getEmpDao() {
        return empDao;
    }

    public void setEmpDao(EmployeeDao empDao) {
        this.empDao = empDao;
    }
    //some methods
}

请注意,EmployeeDao是一个接口。

EmployeeDao接口如下:

代码语言:javascript
运行
复制
public interface EmployeeDao {
    //Oh! so many methods to I have provided
}

类,它实现了EmployeeDaoImpl接口。

代码语言:javascript
运行
复制
public class EmployeeDaoImpl implements EmployeeDao {

    @Autowired
    private SessionFactory sessionFactory;

    //Oh!So many methods I had to implement
}

我想,由于EmployeeService@Service连接的原因,它是自动定位的。我在components中添加了所有包,这样它就可以扫描和实例化我可能拥有的所有依赖项。

但事实并非如此,因此问题就来了。

有人能帮我解决以上细节的错误吗?如果需要更多的细节,请告诉我。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-18 13:41:41

EmployeeDaoImpl没有注册为bean。有两种方法: XML或注释。既然您已经使用了注释,那么您就可以这样做:

代码语言:javascript
运行
复制
@Repository
public class EmployeeDaoImpl implements EmployeeDao {

    @Autowired
    private SessionFactory sessionFactory;

    //...
}

注意,您已经将EmployeeService注册为@Service的bean。在此之后,应该在容器中识别bean并进行适当的注入。

为什么@Repository是DAO,而不是@Service呢?怎么决定?有关更多信息,请阅读白龙氏病文章。

  • @Component是任何Spring托管组件的通用原型
  • @Service在服务层对类进行注释
  • @Repository在持久化层对类进行注释,该类将充当数据库存储库。
票数 1
EN

Stack Overflow用户

发布于 2018-07-18 13:41:28

组件扫描搜索带有Spring原型注释的类。为了使一个类符合自动配线的条件,它必须有以下注释之一。

解决方案是用@Component、@Service或@Repository对EmployeeDaoImpl进行注释。

票数 1
EN

Stack Overflow用户

发布于 2018-07-18 13:42:04

还应该对EmployeeDaoImpl进行注释。

代码语言:javascript
运行
复制
@Repository
public class EmployeeDaoImpl implements EmployeeDao {

   @Autowired
   private SessionFactory sessionFactory;

   //Oh!So many methods I had to implement
}

这应该能解决这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51403415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档