NoSuchBeanDefinitionException,报错了,剑客立即马不停蹄的去百度度娘,发现这个问题是没有找到bean类,此时,立即去bean类查看,发现没有问题,而且代码在别人的电脑上也能跑通,此时就立马着手是配置的问题,没有找到是没有扫描的问题。
@SpringBootApplication
//@EnableScheduling //开启定时器
//@EnableCaching //开启缓存
@MapperScan("zzsxt.mapper")
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
扫描文件主要是pom.xml的配置和文件配置,bean 无注解,普通扫描,此时小编关注pom.文件,发现配置是这样的
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
只扫描了Java下面的文件,而且只扫了.xml文件,于是度娘告诉剑客,需要加上注解
@SpringBootApplication
//@EnableScheduling //开启定时器
//@EnableCaching //开启缓存
@MapperScan("zzsxt.mapper")
@ComponentScan(basePackages = "zzsxt.beans")
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
运行,哦,果断这个问题解决了,但是又报了个异常,如下:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'UserCardTest': Unsatisfied dependency expressed through field 'userCardService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'zzsxt.service.UserCardService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
这个错误最坑人,说是创建Test测试类是无法创建bean ,搞得我一度怀疑Junit有问题甚至重建项目,后面仔细一读才发现说是service创建失败,所以说,读题很重要,英语很重要,剑客的英语就是有点水啦~~~~
好的,找到问题,同理和bean实体类的想法一样,也是没扫描到,加入注解,在启动类上
@SpringBootApplication
//@EnableScheduling //开启定时器
//@EnableCaching //开启缓存
@MapperScan("zzsxt.mapper")
@ComponentScan(basePackages = {"zzsxt.beans","zzsxt.service"})
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
执行,OK,啦啦啦问题解决了,那么问题来了没啥在别人的电脑上可以跑通呢,springboot作为轻量级快速开发,注解式开发都是用注解替代配置文件,同样,如果不加注解,可以配置pom.xm文件
<build>
<plugins>
</plugins>
<resources>
<resource>
<directory>src/main/webapp</directory>
<!--注意此次必须要放在此目录下才能被访问到-->
<targetPath>META-INF/resources</targetPath>
<includes>
<include>**/**</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/**</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
当然二者选其一,如果不小心两个都写了,一定要注意!!!【springboot是优先扫描注解的,配置注解一定要配置完整,不然还是会报错!!】
好了!!这个错误剑客的分享就到这里了,如果你有同样的疑惑,请关注剑客,让剑客与你一起成长!!!