Java系列(LJ)我爱编程

spring boot最佳实战一

2016-06-19  本文已影响10732人  不迷失

构建

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应用。

未完待续

上一篇 下一篇

猜你喜欢

热点阅读