spring boot 下使用@ConponentScan注解遇到的问题
问题描述
如果你心急看结果,请直接到本文末尾
今天使用了注解操作spring boot,一开始程序无法启动,提示无法找到一个注解注入的类,查询网上,有人说使用@ConponetScan注解,可以指定需要扫描的类所在的包.我试了一下,程序能够正常启动了,但是在浏览器端无法访问,提示404错误.程序具体代码如下:
DemoApplication.java:
package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; @SpringBootApplication @ComponentScan(basePackages="domain") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
HelloworldController.java:
package com.example.demo; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import domain.User; @RestController //@RequestMapping("/web") public class HelloworldController { @Autowired User user; @RequestMapping("/getUser") public User getUser(){ //User user = new User(); user.setName("jack"); user.setPwd("pwd"); return user; } }
User.java:
package domain; //@Component @Service() public class User implements Serializable{ private static final long serialVersionUID = 1L; private String name; private String pwd; ... }
程序要点
我在controller类中注入bean类@Autowired User user;
,并且在springboot 的application类中指定了扫描User类所在的包 @ComponentScan(basePackages="domain")
.而且User类也指定了@Service注解.
启动springboot,没有错误,在浏览器打开,提示404错误.
结果分析
具体原因不知道,但是如果把User类放在与application类同一目录下,把application类中的@ComponentScan注解去除,其他不需要改变就能正常访问.
我尝试了很多,发现@ComponentScan注解对本项目下的别的目录无能无力,如果把application类放在顶级目录下,一般放在{groupId}.{artifactId}目录下.其他类放在这个目录或者它的子目录下,就可以在不使用@ComponentScan注解的情况下使用注解(如@Autowired,@Service).因为spring boot 默认扫描
application启动类所在的目录及其子目录下的注解.但是如果把使用注解的类放在application类所在目录之外的目录中,即使使用@ConponentScan注解指定了类所在的目录,也不能正常使用.网上很多说@ComponentScan注解是用于扫描引入的别的模块或jar包的,不知道是不是压根不能指定本项目的其他包.
上面是我之前写的,这里留着,给自己提个醒,产生问题的因素没有梳理完,不要发文章.
下面是真正的原因:
- @ComponentScan默认扫描使用该注解的类所在的包,包括这个包下的类和子包,所以如果没有配置basepackages,并且类都放在子包中,是可以正常访问的
-
如果配置了@ComponentScn中的basepackages,那么就要把所有需要扫描的包都配置.这种情况下,@ComponentScan是不会再去扫描当前类所在的包的.之前我之所以以为@ComponentScan对启动类之外的包无能为力,就是因为配置了domain包,但是没有配controller类的包,导致程序无法访问.
以上问题仅限于本人环境下的,如果有出入,轻喷
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
给妹子讲python-S01E01好用的列表
【妹子说】今天开始学python啦,不过我们从哪里开始学起呢? Python中有一种被称之为“容器”的数据类型,专门用来存放其他类型的对象,就好比小时候用的文具盒,里面放着铅笔、尺子、橡皮等等。很多人刚刚使用Python的时候,往往最先接触的就是这种容器对象,比如列表、字典、元组等等。它们功能全面,使用也很方便,可以解决很多实际问题。 那么,第一季我们就首先从这些好用、实用的python容器入手吧,第一个就介绍列表: Python列表用起来非常灵活,它有三大优点,我们一个一个来说,聊完了这三个优点,基本上列表的基本操作我们就掌握了: 第一个优点: 列表里想装啥就装啥,即:他可以包含不同种类、任意类型的对象,甚至可以嵌套列表,专业点的词儿叫:异构性; 我们看一个例子: L1 = [1, 2, 3, 4, 5] L2 = [1, 'spam', [
- 下一篇
mybatis 执行流程(3)
开篇 这篇文章的主要目的是为了讲清楚Mybatis的整个执行流程,会通过源码、流程图等多个维度进行说明,相关的细节由于涉及面比较广这里暂时先不详细展开。 整体的思路先让大家有个宏观的概念,由了这个主轴以后我们再针对主轴上每个节点再进行细节分析,顺藤摸瓜,让我们先找到这个贯穿的藤。 Mybatis的使用模板 首先我们使用Mybatis的时候都有一般固定的套路: 定义map接口,定义对外查询sql的接口。 配置xml文件,定义查询sql语句。 引入xml文件,引入xml文件进行解析。 调用map接口,调用查询接口提供查询服务。 1、新建一个com.kang.mapper的包,定义map接口,这里以UserMapper为例 package com.kang.mapper; import java.util.List; import com.kang.pojo.User; public interface UserMapper { //根据用户id查询用户信息 public User findUserById(int id) throws Exception; //查询用户列表 publ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- Mario游戏-低调大师作品
- CentOS关闭SELinux安全模块
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Red5直播服务器,属于Java语言的直播服务器
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池