Spring Boot学习笔记-实践建言
2015-12-26 18:17
645 查看
本文延续《Spring Boot学习笔记-快速示例》,从开发指南中摘出一些实践经验可供参考。这也是笔者看到的眼前一亮之处,开发的实践经验不是读书可以学来的,除了看别人的开源源码(当然一般公司内部的代码不允许对外公开的),大多时候得靠自己摸索了。Spring Boot开发指南能从实战的角度提出一些建言,值得赞扬。
默认编译级别为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的使用者,可以覆盖上述的默认配置。
通常建议将应用的main类放在根包下。如下所示。main类放在根包下,@ComponentScan默认会扫描根包下的所有标有@Component、@Service等Spring组件类。main类放在根包下,可以使用@SpringBootApplication注解。通常使用 @EnableAutoConfiguration 注解你的
main类,并且暗地里为某些项定义了一个基础“search package”。例如,如果你正在编写一个JPA应用,被@EnableAutoConfiguration注解的类所在包将被用来搜索 @Entity 项。
笔者之前使用的是XML的配置方式,项目里会有多个Spring的xml配置文件,但applicationContext.xml会import其他的配置文件,其实这就相当于主要源。
参见上面的代码,综合上述的内容,可以看出通常一个Spring Boot应用,需要一个启动的入口,我们可以称为启动类,它包含main方法,负责SpringApplication.run()方法来运行应用。@Configuration标识启动类作为主要配置源。由于启动类位于根包下,@ComponentScan不需要配置basePackage属性,默认扫描根包下的所有Spring组件类,包括其他的@Configuration类。@EnableAutoConfiguration注解可以根据我们依赖的包,推测并自动配置相关的内容以供使用。这也是上篇文章中快速示例的代码,会如此简洁,几乎0配置便可运行应用的原因!
有人会问,如果我确实需要xml配置文件呢?我们不排除特殊情况下Java配置方式无解的时刻,你当然可以导入xml配置内容。只需要在@Configuration类上使用@ImportResource注解即可。
虽然笔者以往习惯使用xml配置方式,但也不由自主地下定决定尽量转向Java配置方式,以符合Spring Boot使用习惯,使用xml配置作为辅助手段。
刚才上面笔者提到了@EnableAutoConfiguration具有自动配置的“神奇特效”。但有时自动配置的内容并非我们所期望的那样,我们完全可以自定义相同的内容去覆盖自动配置中的那些。
你只需要打开控制台输出的debug日志,即可看到一份自动配置报告,列出了所有的自动配置项。如何输出debug日志,可参考笔者的另一篇文章。
如果发现应用了你不想要的特定自动配置类,你可以使用@EnableAutoConfiguration注解的排除属性来禁用它们。
@ComponentScan注解会扫描到Spring组件并自动注册bean,需要使用的时候跟平常一样,使用@Autowired等注解直接标注即可。
一般情况下,很多Spring Boot开发者总是使用@Configuration,@EnableAutoConfiguration和@ComponentScan注解他们的main类的。如果你遵循了上述建言更是如此。因此为了方便,Spring Boot提供了@SpringBootApplication注解,它就相当于@Configuration,@EnableAutoConfiguration和@ComponentScan注解,一个顶三个!那么我们的启动类更简单了。
构建工具
利用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的使用者,可以覆盖上述的默认配置。
项目包结构
项目包结构中,不推荐将类建在default package下,并应该尽量避免它。建议遵循Java包命名规范,使用反转域名作为包路径的根包,例如:cn.chace.www。通常建议将应用的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); } }
相关文章推荐
- Spring XD: 将数据驱动的联系放到统一的平台上
- JAVA常用类之日期处理
- JAVA常用类之Math
- JAVA常用类之String
- java独占锁ReenTrantLock的实现
- JAVA面向对象之内部类
- Struts2 开发环境搭建
- 手动将安卓eclipse工程转为AS工程
- 【算法拾遗(java描述)】--- 插入排序(直接插入排序、希尔排序)
- java web生成验证码
- 关于java用jni调用 dll动态库Can't find dependent libraries错误的解决
- jdk生成webservice客户端代码
- 个人学习-java-循环注意事项
- 关于Java获取带空格的文件路径问题
- java实现生成验证码图片
- java.lang.InstantiationException错误
- HashMap分析
- SPRING + JUNIT + DBUnit + Mockito来做单测
- 修改文件夹中所有文件的文件名
- 使用Spring MVC统一异常处理实战