springboot 目录结构

SpringBoot应用目录结构与包扫描问题解析
本文探讨了SpringBoot项目中目录结构的重要性,特别是在遇到代码与预期不符的问题时。作者通过分析Spring的包扫描机制,发现目录结构不正确可能导致问题。问题在于将Application.java放置在错误的目录下,解决方法是将其移至源代码的根包,并调整其他包的位置。正确的目录结构包括:应用主类在root package,实体和数据访问层在domain包,逻辑层在service包,Web层在web包。

问题的发现&解决

之前一直没有觉得目录结构有多么重要,一直到 后面的代码与预期不符时 ,经过长时间的分析以及 Spring包扫描机制的存在 发现可能是目录结构 哪块不对,或者是 在配置处 哪里出了问题(注解 以及 application.properties的配置上)

在最开始的时候,主要 配置类 处(Application.java),我并没有用@SpringBootApplication而是 使用 @EnableAutoConfiguration,然而通过 @RequestMapping注解 只能访问到 主要配置类 里面有@RequestMapping注解 的方法,其他包下的其他类中的其他方法 都不能通过 @RequestMapping注解 访问。

这个 问题困扰了我很久,一直没找出来 有什么毛病,最后尝试 将@EnableAutoConfiguration注解 替换为@SpringBootApplication注解后,问题 开始浮现

启动springboot时,出现如下报错信息


org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class:
 URL[jar:file:/home/chanllen/.m2/repository/org/springframework/boot/spring-boot-autoconfigure/1.2.5.RELEASE/spring-boot-autoconfigure-1.2.5.RELEASE.jar!/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration$JdbcTemplateConfiguration.class];
 This can happen if you are @ComponentScanning a springframework package (e.g. if you put a @ComponentScan in the default package by mistake)

经过搜索找到了答案:不应将Appication.java 文件放在src/main/java下,要将它放在src/main/java下的根包里(例如src/main/java/me/hugh 下),接着把其他包以及下面的类都移到 src/main/java/me/hugh 下,再次启动就没问题了

目录结构

me
  +- hugh
     +- Application.java
     |
     +- domain
     |  +- Customer.java
     |  +- CustomerRepository.java
     |
     +- service
     |  +- CustomerService.java
     |
     +- web
     |  +- CustomerController.java
     |
  • root package结构:me.hugh
  • 应用主类Application.java置于root package下,通常我们会在应用主类中做一些框架配置扫描等配置,我们放在root package下可以帮助程序减少手工配置来加载到我们希望被Spring加载的内容
  • 实体(Entity)与数据访问层(Repository)置于me.hugh.domain包下
  • 逻辑层(Service)置于com.hugh.service包下
  • Web层(web)置于com.hugh.web包下
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值