服务和服务实现的自动装配 class
Autowiring of Service and Service Implementation class
以下是我的代码
@RestController
public class EmployeeController {
@Autowired
EmployeeService empService;
public EmployeeController (EmployeeService Impl empServiceImpl) {
super();
this.empService = empServiceImpl;
}
}
@Service
public interface EmployeeService {
public List<EmployeeDTO> getAllEmployeeDetails()
}
public class EmployeeServiceImpl {
public List<EmployeeDTO> getAllEmployeeDetails(){
//methods business logic and repo call goes here
}
}
当我启动服务器时出现以下错误。
Parameter 1 of constructor in
com.app.in.controller.EmployeeController required a bean of type
'com.app.in.service.EmployeeServiceImpl' that could not be found
我的理解可能有误。如果我也用 @Service 注释 EmployeeSeriveImpl class 那么它 working.Is 这是正确的方法吗?我的问题是服务接口用@Service 注释仍然为什么它的实现也需要注释。如果我错过了什么,请告诉我?解决这个问题的标准方法是什么?
您可以使用构造函数注入您的依赖项。在这种情况下 @Autowired
是可选的。
这是您的示例,但有一些更正:
@RestController
public class EmployeeController {
// private final is a good practice. no need in @Autowire
private final EmployeeService empService;
// this constructor will be used to inject your dependency
// @Autowired is optional in this case, but you can put it here
public EmployeeController (EmployeeService empServiceImpl) {
this.empService = empServiceImpl;
}
}
我假设您有一个接口 EmployeeService
和 class EmployeeServiceImpl
实现该接口并且是 Spring Bean。
像这样:
@Service
public class EmployeeServiceImpl implements EmployeeService {}
为什么需要这个 @Service
?当您将此注释放在 class 上时,Spring 知道这是一个 Spring 应该为您管理的 bean(容器将创建它的实例并将其注入到需要的地方)。
查看 Spring 文档以获取有关 Dependency Injection 的更多详细信息。
Spring团队通常提倡构造函数注入,因为它允许您将应用程序组件实现为不可变对象,并确保所需的依赖项不为空。
以下是我的代码
@RestController
public class EmployeeController {
@Autowired
EmployeeService empService;
public EmployeeController (EmployeeService Impl empServiceImpl) {
super();
this.empService = empServiceImpl;
}
}
@Service
public interface EmployeeService {
public List<EmployeeDTO> getAllEmployeeDetails()
}
public class EmployeeServiceImpl {
public List<EmployeeDTO> getAllEmployeeDetails(){
//methods business logic and repo call goes here
}
}
当我启动服务器时出现以下错误。
Parameter 1 of constructor in com.app.in.controller.EmployeeController required a bean of type 'com.app.in.service.EmployeeServiceImpl' that could not be found
我的理解可能有误。如果我也用 @Service 注释 EmployeeSeriveImpl class 那么它 working.Is 这是正确的方法吗?我的问题是服务接口用@Service 注释仍然为什么它的实现也需要注释。如果我错过了什么,请告诉我?解决这个问题的标准方法是什么?
您可以使用构造函数注入您的依赖项。在这种情况下 @Autowired
是可选的。
这是您的示例,但有一些更正:
@RestController
public class EmployeeController {
// private final is a good practice. no need in @Autowire
private final EmployeeService empService;
// this constructor will be used to inject your dependency
// @Autowired is optional in this case, but you can put it here
public EmployeeController (EmployeeService empServiceImpl) {
this.empService = empServiceImpl;
}
}
我假设您有一个接口 EmployeeService
和 class EmployeeServiceImpl
实现该接口并且是 Spring Bean。
像这样:
@Service
public class EmployeeServiceImpl implements EmployeeService {}
为什么需要这个 @Service
?当您将此注释放在 class 上时,Spring 知道这是一个 Spring 应该为您管理的 bean(容器将创建它的实例并将其注入到需要的地方)。
查看 Spring 文档以获取有关 Dependency Injection 的更多详细信息。
Spring团队通常提倡构造函数注入,因为它允许您将应用程序组件实现为不可变对象,并确保所需的依赖项不为空。