作为一个springboot初学者,在探索过程中难免遇到一些坑,边看书边动手,发现书本中的版本是1.0,而我使用的是最新版2.0,所以有些东西不能完全按照书本进行操作,因为2.0中已经不支持1.0中的部分配置了,比如2.0中的注解@SpringBootApplication是注解@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan的组合,而1.0中它是@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan等。而且在入门教程中将启动类和controller放在同一个类中,但是这样的配置随着业务的扩展controller会越来越多,随之而来的问题就是启动类越来越大,考虑到这点,我想将启动类和controller分开配置,参考网络资源,并在一番恶斗之后终于实现了这个想法,因为遇到了一些坑,所以必须记录下来!!

一、controller和启动类在同一个class中

使用IntellJ IDEA创建springboot项目时,会在默认的包下自动创建一个*Application.java的类,其中*一般是artifact名称,即项目名称,然后可以直接在这个类中配置controller并使用这个类启动项目。

@Controller
@SpringBootApplication
public class WebdemoApplication {@RequestMapping("/")public String index(Model model) {Person person = new Person("张三", 26);List<Person> people = new ArrayList<>();Person p1 = new Person("李四", 27);Person p2 = new Person("王五", 27);Person p3 = new Person("赵六", 27);people.add(p1);people.add(p2);people.add(p3);model.addAttribute("singlePerson", person);model.addAttribute("people", people);return "/hello/index";}public static void main(String[] args) {SpringApplication.run(WebdemoApplication.class, args);}
}

这就是将controller和启动类放在一个类中的配置,直接点右键运行这个类就可以访问了!

二、将controller和启动类分开配置

因为将controller和启动类分开,所以首先要新建一个controller类

@Controller
public class HelloController {@RequestMapping("/hello")public String index(Model model) {Person person = new Person("张三", 26);List<Person> people = new ArrayList<>();Person p1 = new Person("李四", 27);Person p2 = new Person("王五", 27);Person p3 = new Person("赵六", 27);people.add(p1);people.add(p2);people.add(p3);model.addAttribute("singlePerson", person);model.addAttribute("people", people);return "/hello/index";}
}

我不改变启动类的位置,但是启动类中只要一个main方法即可,如下:

@SpringBootApplication
public class MyWebdemoApplication {public static void main(String[] args) {SpringApplication.run(MyWebdemoApplication.class, args);}
}

此时不改变启动类位置,目录如下:

此时我访问http://127.0.0.1:8080/hello时总是包404,排除视图文件的因素之后我将启动类放到com.hyc下,目录如下:

此时再重启服务,访问http://127.0.0.1:8080/hello时才正常了!

所以这种方式一定要将启动类放在root目录下,这样才能扫描到controller、service,如果想让启动类放在任何地方都生效的话,可以使用下面的配置方法

@ComponentScan(basePackages = {"com.hyc"})
@SpringBootApplication
public class WebdemoApplication {public static void main(String[] args) {SpringApplication.run(WebdemoApplication.class, args);}
}

这种方法中,controller不变,启动类放在任意包下面,我是放在创建项目默认包中,这样只需在启动类上增加注解@ComponentScan即可,其中的(basePackages = {"com.hyc"})是需要扫描的包名,可以是多个,如(basePackages = {"com.hyc.controller","com.hyc.service"})等,这就意味着mvc容器会去这些包下面扫描,进而找到controller等资源。

三、总结

综上所述,springboot的配置有以下三种:

1、当启动类和controller在同一类中时,需要在该类上添加注解@Controller;

2、当启动类和controller分开时,启动类要放在根目录下,启动类上只有注解@SpringBootApplication;

3、当启动类和controller分开时,如果启动类在某个包下,需要在启动类中增加注解@ComponentScan,配置需要扫描的包名;

转载于:https://www.cnblogs.com/hellowhy/p/10045783.html

SpringBoot--springboot启动类和controller的配置相关推荐

  1. 学习总结:springboot 的启动类Starters的理解

    目录 一.Starters是什么? 二.Starters命名 三.Starters分类 1. Spring Boot应用类启动器 2. Spring Boot生产启动器 3. Spring Boot技 ...

  2. SpringBoot的启动类显示的是个方框而不是叶子形状

    目录索引 一.项目背景 二.报错展示 三.原因分析 四.纠错方案 五.后话 一.项目背景 部署SpringCloud项目测试OpenFeign(远程调用和负载均衡的集成者)组件 新建服务消费者测试mo ...

  3. SpringBoot, 启动类,使用「SpringBootApplication」标注

    ■使用 @SpringBootApplication public class MyApplication {public static void main(String[] args) {Sprin ...

  4. 关于idea中springboot主启动类没有绿色启动的问题

    第1步:查看jar包是否导入,若没有导入 导入jar包,点击红色圈住的按钮 第2步:导入完成jar之后,需要进行编译,点击compile进行编译即可.

  5. springboot系列(三) 启动类中关键注解作用解析

    一.Springboot:请求入口@SpringBootApplication @EnableAspectJAutoProxy @EnableScheduling @EnableTransaction ...

  6. 基于SpringBoot的后台管理系统(启动类解析,开源的世界真好)(一)

    Guns基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springmvc + shiro + 分页插件PageHelper + 通用Mapper + beetl!Guns项目代码简洁 ...

  7. SpringBoot 启动类 @SpringBootApplication 注解 以及执行流程

    @SpringBootApplication  : 是Sprnig Boot项目的核心注解,目的是开启自动配置 目录 @SpringBootApplication  : 是Sprnig Boot项目的 ...

  8. SpringBoot Jar启动

    SpringBoot项目的启动 当我们在IDE中新建(或导入)了一个SpringBoot项目之后,我们如果想要启动这个SpringBoot项目,我们可以找到相应的带有@SpringBootApplic ...

  9. SpringBoot(2.4.0)自动配置原理(源码)

    一.从@SpringBootApplication讲起 源码 @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Docu ...

最新文章

  1. Mat,Iplimage,vector,vector_vector_Point2f等类型之间的相互转换
  2. 服务器安装使用rstudio-server
  3. html增加状态信息管理代码,JavaScript+HTML实现学生信息管理系统
  4. 安装APK失败,错误代码:INSTALL_FAILED_INVALID_APK 解决方案
  5. zookeeper的名词复盘-数据模型
  6. c语言笔记之数组和指针(初学者)
  7. Spring Cloud Alibaba迁移指南(四):零代码兼容 Api-Gateway 1
  8. Android开发推荐资料大合集
  9. 深度解读:GAN模型及其在2016年度的进展
  10. 前排!零基础小白学习3D建模的必经之路
  11. Choerodon猪齿鱼敏捷管理实践(一)——需求管理
  12. Python编程从入门到实践学习内容包含哪些?
  13. 免费开源的100套Echarts大屏数据可视化模板分享
  14. 谷歌浏览器Network详解
  15. xp系统安装金蝶k3服务器配置,xp安装金蝶k3安全设置.doc
  16. 《麻省理工学院公开课:人工智能》笔记二
  17. 中科院python编程培训班
  18. 使用Asponse.cells生成图片如何去掉水印
  19. 基于web在线购物商城网站的设计与实现(学生网页设计作业源码)
  20. 服务器换主板不换系统教程,主板要换,系统不变

热门文章

  1. “那不勒斯”服务器芯片,32核/64超线程:AMD 公开 Naples “那不勒斯” 部分规格和性能...
  2. 神奇!大神利用AI修复古董纪录片,还原1920年的京城生活
  3. 量化评估推荐系统效果
  4. 数据结构(三)插入排序
  5. 乘法更新规则对于并发的非负矩阵分解和最大间隔分类
  6. linux调用python出错,linux里面python调用系统命令问题
  7. php 判断函数禁用,php禁用函数设置及查看方法的介绍(附示例)
  8. webpack打包原理_对于webpack打包原理你知道有多少?
  9. jquery 监听td点击事件_安卓开发监听点击事件的一种方法
  10. maven依赖avro_Apache Avro使用入门指南