spring boot最佳实战一

作者: 不迷失 | 来源:发表于2016-06-19 18:21 被阅读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应用。

    未完待续

    相关文章

      网友评论

      • 0534f99e7f03:我的spring boot 版本是1.5.2 的 我想引入一个 spring boot 版本2.0.0的es 怎么把 spring boot 的父依赖的版本注释掉

      本文标题:spring boot最佳实战一

      本文链接:https://www.haomeiwen.com/subject/oebbdttx.html