关于SpringBoot启动过程中报NoSuchBeanDefinitionException的异常的问题

场景:原本app模块中的类移动到新建的biz模块中,发现无法注入,报:NoSuchBeanDefinitionException的异常

原因:Spring Boot会自动扫描@SpringBootApplication所在类的同级包,以及下级包里的所有BEAN,所以建议入口类放在最外层的包名下,而新建biz模块的时候,创建的包路径和app模块中主程序的包路径不一致。

总结:图中的路径是springboot的扫描包的基础路径,所有的类无论在哪个模块下,都应该以此包路径为基础进行创建;另外,可以添加注解@ComponentScan(basePackages = "XXX.XXX")应该可以解决路径不一致的问题,但是不建议这么做。

PS: 其他可能导致这个异常的情况有:忘记给类添加注解、类的方法属性为private等。

发布了4 篇原创文章 · 获赞 1 · 访问量 9021
展开阅读全文

springboot JPA的DAO报错NullPointerException

03-29

初次尝试搭建一个springboot框架,目前进行到JPA操作数据库这一步,但是继承了JpaRepository的UserDAO接口总是报空指针错误。 这是UserDAO: ``` @Repository public interface UserDAO extends JpaRepository<User,Long> { } ``` 这是测试类: ``` @Service public class Tes { @Autowired public UserDAO user; public void t() { User u = new User(); u.setAccount("ff"); u.setName("asufhua"); u.setPassword("123456"); u.setQx(1); user.save(u); } } ``` 这是Controller,在跳转首页之前,会调用Tes类往数据库里插一条记录: ``` @Controller public class HelloController { @RequestMapping("/") public String index() { new Tes().t(); return "index"; } } ``` 现在我每次进入首页,就会提示user.save处的空指针错误,好像这个DAO没有注入成功一样。 到现在折腾一下午了,我只能初步认定**这个DAO没有注入成功**,所以会NULL。 之前我找到的一个解决办法:把DAO和测试类放在同一个目录下就可以成功,可为什么分开放就不行? 我现在的目录结构是启动类在顶层,然后下面有dao/domain/web/service等多个子包。像这样分开放,会提示“expected at least 1 bean which qualifies as autowire candidate.” 于是我尝试在启动类加上路径扫描@MapperScan("xx.xx.dao"),就不报找不到bean的错,可以运行起来。 但是跑起来后,涉及到dao的操作又会报空指针错误。 我感觉spring怎么这么乱呢?启动类为什么不会扫描下面的子包?为什么注入后又是NULL? 哪位大侠帮帮我? 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览