2019独角兽企业重金招聘Python工程师标准>>>

本文延续《Spring Boot学习笔记-快速示例》,从开发指南中摘出一些实践经验可供参考。这也是笔者看到的眼前一亮之处,开发的实践经验不是读书可以学来的,除了看别人的开源源码(当然一般公司内部的代码不允许对外公开的),大多时候得靠自己摸索了。Spring Boot开发指南能从实战的角度提出一些建言,值得赞扬。

构建工具

利用Spring Boot开发应用,之前就建议选择一种构建工具。笔者习惯Maven,在此只提及Maven。当我们的pom.xml中继承了spring-boot-starter-parent,就会得到一些默认配置,如下所示。

  • 默认编译级别为Java 1.6
  • 源码编码为UTF-8
  • 一个依赖管理节点,允许你省略普通依赖的 <version> 标签,继承自spring-boot-dependencies POM。
  • 合适的资源过滤
  • 合适的插件配置(exec插件,surefire,Git commit ID,shade)针对 application.properties 和 application.yml 的资源过滤

**ps:**由于默认配置文件接收Spring风格的占位符(${...}),Maven filtering改用 @..@ 占位符(你可以使用Maven属性 resource.delimiter 来覆盖它) 。

熟悉Maven的使用者,可以覆盖上述的默认配置。

项目包结构

  1. 项目包结构中,不推荐将类建在default package下,并应该尽量避免它。建议遵循Java包命名规范,使用反转域名作为包路径的根包,例如:cn.chace.www。
  2. 通常建议将应用的main类放在根包下。如下所示。main类放在根包下,@ComponentScan默认会扫描根包下的所有标有@Component、@Service等Spring组件类。main类放在根包下,可以使用@SpringBootApplication注解。通常使用 @EnableAutoConfiguration 注解你的 main类,并且暗地里为某些项定义了一个基础“search package”。例如,如果你正在编写一个JPA应用,被@EnableAutoConfiguration注解的类所在包将被用来搜索 @Entity 项。

项目的启动类

Spring的常用的配置方式有XML和Java类两种。Spring Boot建议使用Java配置的方式,并用@Configuration类作为主要源,通常定义main方法的类是主要源的一个很好候选。

笔者之前使用的是XML的配置方式,项目里会有多个Spring的xml配置文件,但applicationContext.xml会import其他的配置文件,其实这就相当于主要源。

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {public static void main(String[] args) throws Exception {SpringApplication.run(Application.class, args);}
}

参见上面的代码,综合上述的内容,可以看出通常一个Spring Boot应用,需要一个启动的入口,我们可以称为启动类,它包含main方法,负责SpringApplication.run()方法来运行应用。@Configuration标识启动类作为主要配置源。由于启动类位于根包下,@ComponentScan不需要配置basePackage属性,默认扫描根包下的所有Spring组件类,包括其他的@Configuration类。@EnableAutoConfiguration注解可以根据我们依赖的包,推测并自动配置相关的内容以供使用。这也是上篇文章中快速示例的代码,会如此简洁,几乎0配置便可运行应用的原因!

Spring配置方式

这里其实牵涉到Spring Java配置方式的应用,所以建议大家去熟悉一下该方面的内容。

有人会问,如果我确实需要xml配置文件呢?我们不排除特殊情况下Java配置方式无解的时刻,你当然可以导入xml配置内容。只需要在@Configuration类上使用@ImportResource注解即可。

虽然笔者以往习惯使用xml配置方式,但也不由自主地下定决定尽量转向Java配置方式,以符合Spring Boot使用习惯,使用xml配置作为辅助手段。

刚才上面笔者提到了@EnableAutoConfiguration具有自动配置的“神奇特效”。但有时自动配置的内容并非我们所期望的那样,我们完全可以自定义相同的内容去覆盖自动配置中的那些。

你只需要打开控制台输出的debug日志,即可看到一份自动配置报告,列出了所有的自动配置项。如何输出debug日志,可参考笔者的另一篇文章。

如果发现应用了你不想要的特定自动配置类,你可以使用@EnableAutoConfiguration注解的排除属性来禁用它们。

@Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class MyConfiguration {
}

@ComponentScan注解会扫描到Spring组件并自动注册bean,需要使用的时候跟平常一样,使用@Autowired等注解直接标注即可。

一般情况下,很多Spring Boot开发者总是使用@Configuration,@EnableAutoConfiguration和@ComponentScan注解他们的main类的。如果你遵循了上述建言更是如此。因此为了方便,Spring Boot提供了@SpringBootApplication注解,它就相当于@Configuration,@EnableAutoConfiguration和@ComponentScan注解,一个顶三个!那么我们的启动类更简单了。

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

转载于:https://my.oschina.net/angerbaby/blog/551501

Spring Boot学习笔记-实践建言相关推荐

  1. Spring Boot学习笔记-进阶(3)

    文章目录 Spring Boot学习笔记-进阶(3) 一.Spring Boot与缓存 二.Spring Boot与消息 三.Spring Boot与检索 四.Spring Boot与任务 异步任务 ...

  2. Spring Boot学习笔记-基础(2)

    Spring Boot学习笔记-基础(2) Spring Boot 优点: – 快速创建独立运行的Spring项目以及与主流框架集成 – 使用嵌入式的Servlet容器,应用无需打成WAR包 – st ...

  3. Spring Boot学习笔记(1)

    文章目录 Spring Boot学习笔记(1) Spring Boot 整合 JSP Spring Boot HTML Thymeleaf 常用语法 Spring Boot 数据校验 Spring B ...

  4. Vue + Spring Boot 学习笔记02:引入数据库实现用户登录功能

    Vue + Spring Boot 学习笔记02:引入数据库实现用户登录功能 在学习笔记01里,我们利用跨域打通了前端的Vue与后端的Spring Boot,实现了用户登录功能,但是后台的登录控制器在 ...

  5. Vue + Spring Boot 学习笔记01:实现用户登录功能

    Vue + Spring Boot 学习笔记01:实现用户登录功能 一.创建后端Spring Boot项目Book Management 二.创建前端Vue项目bm-vue 三.修改后端项目Book ...

  6. 超赞:不愧是阿里内部“Spring boot学习笔记”从头到尾,全是精华

    spring boot为何会出现? 随着动态语言的流行(Ruby.Groovy. Scala. Node.js),Java 的开发显得格外的笨重:繁多的配置.低下的开发效率.复杂的部署流程以及第三方技 ...

  7. Spring Boot学习笔记 [完结]

    Spring Boot 文章目录 Spring Boot 1.微服务 1.1 什么是微服务? 1.2 单体应用架构 1.3 微服务架构 2. 第一个SpringBoot程序 2.1.原理 2.2 原理 ...

  8. Spring Boot学习笔记-Nginx+Jar包部署项目

    写在前面 之前用Spring Boot写的获取英雄联盟战绩的小项目,只是上传到了Github上,Github地址:lol-api.一直没时间部署到服务器上.今天,找时间部署好了,网址是:api.51c ...

  9. Spring Boot 学习笔记--整合Thymeleaf

    1.新建Spring Boot项目 添加spring-boot-starter-thymeleaf依赖 1 <dependency> 2 <groupId>org.spring ...

最新文章

  1. stanford coursera 机器学习编程作业 exercise 3(逻辑回归实现多分类问题)
  2. 回文字符串啊~---太搞了 少年 DXH
  3. java基础----String、StringBuffer、StringBuilder
  4. 双端队列 HDOJ 3530 Subsequence
  5. Kubernetes pod状态出现ImagePullBackOff的原因
  6. Sharepoint WebService引用
  7. 2018.08.22 NOIP模拟 string(模拟)
  8. Attention Please
  9. python3怎么查看帮助文档pydoc?
  10. 你知道 FW 工程师 是做什么的吗?
  11. netcfg.hlp 官方版
  12. 乐优商城(四十八)评论微服务(一)
  13. ffmpeg截取视频指定帧方法
  14. BI报表工具FineReport的使用1【FineReport使用,看过这篇就够了】
  15. 【个人学年总结】大一——“蛰伏”的一年
  16. 软考中项第三章 信息系统集成专业知识
  17. 用paypal付款手续费一般是多少?
  18. 微信小程序-云函数获取用户openid
  19. Windows 更新:服务堆栈更新
  20. UVa 243 - Theseus and the Minotaur (II)

热门文章

  1. 注册中心ZooKeeper、Eureka、Consul 、Nacos
  2. python删除排序数组中的重复项
  3. Java中的引用与C中的指针
  4. Android之----Log详解(Log.v,Log.d,Log.i,Log.w,Log.e)
  5. 关闭服务器 找不到文件,在服务器上找不到文件时阻止代码崩溃的方法?
  6. JavaScript比较数组的方法
  7. 2021-05-10 如何修改Docker的默认镜像存储位置
  8. 2021-01-13 Linux下安装lua开发环境 Ubuntu
  9. Echarts组件 tooltip提示formatter函数
  10. 【查看hadoop镜像】