在开始之前,请假定pom.xml
是无故障的。
话虽如此,让我们继续前进,
我收到的错误如下:
申请开始失败
***************************说明:
com.sagarp.employee.EmployeeService中的empDao字段需要一个Bean
键入“ com.sagarp.employee.EmployeeDao”(找不到)。
现在spring boot application
类如下:
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
类如下: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
界面如下:public interface EmployeeDao {
//Oh! so many methods to I have provided
}
实现
EmployeeDaoImpl
接口的EmployeeDao
类。public class EmployeeDaoImpl implements EmployeeDao {
@Autowired
private SessionFactory sessionFactory;
//Oh!So many methods I had to implement
}
我猜是由于
EmployeeService
被@Service
注释的原因,它是自动自动连接的。我在
components
中添加了所有软件包,以便它将扫描并实例化我可能具有的所有依赖关系。但这没有,因此是问题。
任何人都可以通过上述详细信息来帮助我解决错误。
请让我知道是否需要更多详细信息。
最佳答案
EmployeeDaoImpl
未注册为bean。有两种方法:XML或注释。由于您已经使用了注释,因此您可以执行以下操作:
@Repository
public class EmployeeDaoImpl implements EmployeeDao {
@Autowired
private SessionFactory sessionFactory;
//...
}
请注意,您已经将
EmployeeService
注册为@Service
的bean。此后,应在容器中识别咖啡豆并正确注入。为什么要DAO使用
@Repository
而不是@Service
?如何决定?阅读Baeldung's文章以获取更多信息。@Component
是任何Spring托管组件的通用构造型@Service
在服务层注释类@Repository
在持久层注释类,它将充当数据库存储库