错误需要找不到类型为 'XXX' 的 bean
Error required a bean of type 'XXX' that could not be found
我正在通过添加一个名为 news 的页面来更新 spring 启动项目,但它有以下错误。
Field newsService in com.lrs.admin.controller.NewsController required
a bean of type 'com.lrs.admin.service.INewsService' that could not be
found.
代码如下:
Application.java
@MapperScan("com.lrs.admin.dao")
@ServletComponentScan
@SpringBootApplication
public class Application extends SpringBootServletInitializer implements EmbeddedServletContainerCustomizer{
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
NewController.java
@Controller
@RequestMapping("/news")
public class NewsController extends BaseController {
private final static String qxurl="news/list";
@Autowired
private INewsService newsService;
INewsService.java
package com.lrs.admin.service;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Componnt;
import com.lrs.admin.util.ParameterMap;
@Component
public interface INewsService {
public List<ParameterMap> list();
public Map<String,Object> getNews(ParameterMap pm);
public Map<String,Object> edit(ParameterMap pm);
public Map<String,Object> add(ParameterMap pm,HttpSession session);
public Map<String,Object> del(String newsId);
}
NewsService.java
public class NewsService implements INewsService {
@Autowired
private NewsDao newsDao;
NewsDao.java
public interface NewsDao {
public List<ParameterMap> list();
public List<ParameterMap> getAllNewsById(ParameterMap pm);
public ParameterMap getNewsById(ParameterMap pm);
public void updateNews(ParameterMap pm);
public void addNews(ParameterMap pm);
public void delNews(String roleId);
// public void delUserRole(String roleId);
}
NewsMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lrs.admin.dao.NewsDao">
</mapper>
我只是创建了那些文件,并没有实现任何方法yet.Is这是为什么?有什么帮助吗?谢谢。
您应该在实现接口的 class 上注释 @Service
而不是接口本身。即把NewsService
注解为@Service
,就可以把INewsService
中的@Component
标签去掉
我们从不在界面上放置@Component
(或@Service
,...),因为这会使界面无用。让我解释一下为什么。
如果您有一个接口,那么您想将该接口用于注入点类型。
接口的目的是定义一个可以由多个实现实现的契约。在另一侧,您有注入点 (@Autowired
)。只有一个接口和实现它的 class 是没有用的。
您必须从 INewsService
中删除 @Component
注释并在 NewsService
class 中添加 @Service
注释,因为 Spring 试图实例化它创建一个 Bean @Service
,但它是一个接口,所以这是不可能的。
尝试从您的 INewsService.java
中删除此 @Component
并将 @Service
添加到 NewsService.java
它将解决错误并且更加全面,原因 @Component
是 @Repository
、@Service
和 @Controller
.
的概括
@Component
: 任何 Spring-managed 组件的通用构造型
@Repository
: 持久层的原型
@Service
: 服务层的原型
@Controller
: 表示层的原型 (spring-mvc)
我正在通过添加一个名为 news 的页面来更新 spring 启动项目,但它有以下错误。
Field newsService in com.lrs.admin.controller.NewsController required a bean of type 'com.lrs.admin.service.INewsService' that could not be found.
代码如下: Application.java
@MapperScan("com.lrs.admin.dao")
@ServletComponentScan
@SpringBootApplication
public class Application extends SpringBootServletInitializer implements EmbeddedServletContainerCustomizer{
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
NewController.java
@Controller
@RequestMapping("/news")
public class NewsController extends BaseController {
private final static String qxurl="news/list";
@Autowired
private INewsService newsService;
INewsService.java
package com.lrs.admin.service;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Componnt;
import com.lrs.admin.util.ParameterMap;
@Component
public interface INewsService {
public List<ParameterMap> list();
public Map<String,Object> getNews(ParameterMap pm);
public Map<String,Object> edit(ParameterMap pm);
public Map<String,Object> add(ParameterMap pm,HttpSession session);
public Map<String,Object> del(String newsId);
}
NewsService.java
public class NewsService implements INewsService {
@Autowired
private NewsDao newsDao;
NewsDao.java
public interface NewsDao {
public List<ParameterMap> list();
public List<ParameterMap> getAllNewsById(ParameterMap pm);
public ParameterMap getNewsById(ParameterMap pm);
public void updateNews(ParameterMap pm);
public void addNews(ParameterMap pm);
public void delNews(String roleId);
// public void delUserRole(String roleId);
}
NewsMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lrs.admin.dao.NewsDao">
</mapper>
我只是创建了那些文件,并没有实现任何方法yet.Is这是为什么?有什么帮助吗?谢谢。
您应该在实现接口的 class 上注释 @Service
而不是接口本身。即把NewsService
注解为@Service
,就可以把INewsService
@Component
标签去掉
我们从不在界面上放置@Component
(或@Service
,...),因为这会使界面无用。让我解释一下为什么。
如果您有一个接口,那么您想将该接口用于注入点类型。
接口的目的是定义一个可以由多个实现实现的契约。在另一侧,您有注入点 (
@Autowired
)。只有一个接口和实现它的 class 是没有用的。
您必须从 INewsService
中删除 @Component
注释并在 NewsService
class 中添加 @Service
注释,因为 Spring 试图实例化它创建一个 Bean @Service
,但它是一个接口,所以这是不可能的。
尝试从您的 INewsService.java
中删除此 @Component
并将 @Service
添加到 NewsService.java
它将解决错误并且更加全面,原因 @Component
是 @Repository
、@Service
和 @Controller
.
@Component
: 任何 Spring-managed 组件的通用构造型
@Repository
: 持久层的原型
@Service
: 服务层的原型
@Controller
: 表示层的原型 (spring-mvc)