构建
Maven用户可以继承spring-boot-starter-parent项目来获取合适的默认设置。该父项目提供以下特性:
默认编译级别为Java 1.6
源码编码为UTF-8
一个依赖管理节点,允许你省略普通依赖的<version>标签,继承自spring-boot-dependencies POM。
想配置你的项目继承spring-boot-starter-parent
只需要简单地设置parent
为:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.6</version>
</parent>
注:你应该只需要在该依赖上指定Spring Boot版本。如果导入其他的starters,你可以放心的省略版本号。
如果你不使用spring-boot-starter-parent
,通过使用一个scope=import
的依赖,你仍能获取到依赖管理的好处:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.2.6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
改变java版本
spring-boot-starter-parent
选择相当保守的Java兼容策略。如果你遵循我们的建议,使用最新的Java版本,你可以添加一个java.version
属性:
<properties> <java.version>1.8</java.version></properties>
使用Spring Boot Maven插件
Spring Boot包含一个Maven插件,它可以将项目打包成一个可执行jar。如果想使用它,你可以将该插件添加到<plugins>节点处:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
注:如果使用Spring Boot starter parent pom,你只需要添加该插件而无需配置它,除非你想改变定义在partent中的设置。
使用starters poms
Spring Boot starters可以简化Spring项目的库依赖管理,将某一特定功能所需要的依赖库都整合在一起,就形成一个starter,例如:连接数据库、springmvc、spring测试框架等等。简单来说,spring boot使得你的pom文件从此变得很清爽且易于管理。
常用的starter以及用处可以列举如下:
spring-boot-starter: 这是核心Spring Boot starter,提供了大部分基础功能,其他starter都依赖于它,因此没有必要显式定义它。
spring-boot-starter-actuator:主要提供监控、管理和审查应用程序的功能。
spring-boot-starter-jdbc:该starter提供对JDBC操作的支持,包括连接数据库、操作数据库,以及管理数据库连接等等。
spring-boot-starter-data-jpa:JPA starter提供使用Java Persistence API(例如Hibernate等)的依赖库。
spring-boot-starter-data-*:提供对MongoDB、Data-Rest或者Solr的支持。
spring-boot-starter-security:提供所有Spring-security的依赖库。
spring-boot-starter-test:这个starter包括了spring-test依赖以及其他测试框架,例如JUnit和Mockito等等。
spring-boot-starter-web:该starter包括web应用程序的依赖库。
组织你的代码
Spring Boot不需要使用任何特殊的代码结构,然而,这里有一些有用的最佳实践。
1 使用"default"包
当类没有包含package
声明时,它被认为处于default package
下。通常不推荐使用default package
,并应该避免使用它。因为对于使用@ComponentScan
,@EntityScan
或@SpringBootApplication
注解的Spring Boot应用来说,来自每个jar的类都会被读取,这会造成一定的问题。
注:我们建议你遵循Java推荐的包命名规范,使用一个反转的域名(例如com.example.project
)。
2 定位main应用类
我们通常建议你将main应用类放在位于其他类上面的根包(root package)中。通常使用@EnableAutoConfiguration
注解你的main类,并且暗地里为某些项定义了一个基础“search package
”。例如,如果你正在编写一个JPA应用,被EnableAutoConfiguration
注解的类所在包将被用来搜索@Entity
项。
使用根包允许你使用@ComponentScan
注解而不需要定义一个basePackage属性。如果main类位于根包中,你也可以使用@SpringBootApplication
注解。
下面是一个典型的结构:
com
+- example
+- myproject
+- Application.java
|
+- domain
| +- Customer.java
| +- CustomerRepository.java
|
+- service
| +- CustomerService.java
|
+- web
+- CustomerController.java
Application.java
文件将声明main方法,还有基本的@Configuration.
package com.example.myproject;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
配置
pring Boot提倡基于Java的配置。尽管你可以使用一个XML源来调用SpringApplication.run()
,我们通常建议你使用@Configuration
类作为主要源。一般定义main方法的类也是主要@Configuration
的一个很好候选。
1 导入其他配置类
你不需要将所有的@Configuration
放进一个单独的类。@Import
注解可以用来导入其他配置类。另外,你也可以使用@ComponentScan
注解自动收集所有的Spring组件,包括@Configuration
类。
2 导入XML配置
如果你绝对需要使用基于XML的配置,我们建议你仍旧从一个@Configuration
类开始。你可以使用附加的@ImportResource
注解加载XML配置文件。
Spring Beans和依赖注入
你可以自由地使用任何标准的Spring框架技术去定义beans和它们注入的依赖。简单起见,我们经常使用@ComponentScan
注解搜索beans,并结合@Autowired
构造器注入。
如果使用上面建议的结构组织代码(将应用类放到根包下),你可以添加@ComponentScan
注解而不需要任何参数。你的所有应用程序组件(@Component
,@Service
,@Repository
,@Controller
等)将被自动注册为Spring Beans。
大家需要清楚一点的是,springboot不是一个全新的框架,而是在spring框架的基础上构建的,因此我们平时在spring中使用的那些在springboot中仍然是一样使用的,向@Component
, @Service
, @Repository
, @Controller
等这些并不是springboot中的,本身就是spring中的。
使用@SpringBootApplication注解
很多Spring Boot开发者总是使用@Configuration
,@EnableAutoConfiguration
和@ComponentScan
注解他们的main类。由于这些注解被如此频繁地一块使用(特别是你遵循以上最佳实践时),Spring Boot提供一个方便的@SpringBootApplication
选择。
该@SpringBootApplication注解等价于以默认属性使用@Configuration
,@EnableAutoConfiguration
和@ComponentScan
。
package com.example.myproject;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
在Spring Boot项目中,xxxApplication.java会作为应用程序的入口,负责程序启动以及一些基础性的工作。@SpringBootApplication是这个注解是该应用程序入口的标志,然后有熟悉的main函数,通过SpringApplication.run(xxxApplication.class, args)
来运行Spring Boot应用。
未完待续
网友评论