1.如果您使用注释进行配置,则可能会缺少cn.itcast.crm.service.BaseDictService实现的注释(@Service或@Component等)。
2.如果您使用(仅)xml,您可能会错过BaseDictService实现的<bean>定义。
3.如果您使用注释并且实现注释正确,请检查扫描实现所在的包
(检查各自组件的自动扫描组件<context:component-scan base-package = “XXXX”)
或者(Spring自动扫描<context:annotation-config/>)
4.代码有无错误:例子如下,
BaseDictMapper在mapper文件下并在相关的mapper.xml进行相关配置,BaseDictService在service文件下并做了相关的spring配置文件做了对应的配置。Service实现具有相同申明方法的mapper接口(而spring并不能扫描到mapper文件夹下的接口和类),因此BeanFactory在Spring Context中没有找到bean的实例,最终导致Spring无法识别相应的bean
public interface BaseDictMapper {
//根据类别代码查询数据
List<BaseDict> queryBaseDictByDictTypeCode(String dictTypeCode);
}
public interface BaseDictService {
//根据类别代码查询
List<BaseDict> queryBaseDictByDictTypeCode(String dictTypeCode);
}
public class BaseDictServiceImpl implements BaseDictMapper { //错误:应该实现为BaseDictService
@Autowired
private BaseDictMapper baseDictMapper;
@Override
public List<BaseDict> queryBaseDictByDictTypeCode(String dictTypeCode) {
List<BaseDict> list = this.baseDictMapper.queryBaseDictByDictTypeCode(dictTypeCode);
return list;
}
}
下面是我是我写的是时候遇到的问题,在网上找了一圈后 还是没有什么头绪,最后有了那么一点灵感 才发现就是一个很小细节问题。。
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'PersonService' available
<bean id="PersonService" class="com.spring.service.impl.PersonServiceImpl"></bean>
结果 就是,bean中id的值存在大小写的问题,和后面的没有对应。。
Spring无法识别bean的问题排查
博客主要讲述Spring无法识别相应bean的问题及排查方法。若用注释配置,可能缺少实现注释;用xml配置,可能错过<bean>定义;注释正确则检查扫描包。还举例说明代码配置问题导致无法扫描,最后指出自己遇到的是bean中id大小写不对应问题。
5311

被折叠的 条评论
为什么被折叠?



