您的位置:首页 > 编程语言 > Java开发

Spring Boot学习笔记-实践建言

2015-12-26 18:17 645 查看
本文延续《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的使用者,可以覆盖上述的默认配置。

项目包结构

项目包结构中,不推荐将类建在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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: