美文网首页Spring Boot Application
从零开始搭建Spring开发环境(一)

从零开始搭建Spring开发环境(一)

作者: MeazZa | 来源:发表于2018-01-29 11:12 被阅读0次

    [推荐阅读时间:25min]

    准备工作

    本文是面向想了解如何开始使用Spring进行Java Web开发的同学。这里假设您已经了解了以下的相关技术:

    • Java:程序开发语言,已安装好JDK1.8+以上的版本,并配置好环境变量
    • Maven:包管理软件,已安装好3.2+以上的版本,并配置好环境变量
    • Intellij IDEA:Java开发IDE

    以上相关工具的安装和部署,如果需要的话,我可以再单独写文章介绍详细的操作步骤。

    Spring 简介

    Spring是目前广泛使用的Java Web开发框架。它将依赖注入(DI,Dependency Injection)和操作反转(IoC,Inversion of Control)的概念很好的实现,并通过模块化,支持各种丰富的功能,使得Web开发的复杂性大大的降低。
    关于Spring的更多介绍,可以浏览Spring的主页进一步了解:
    https://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/overview.html

    开始

    这里我们描述一个需求:可以通过URL的GET请求的方式,传入一个字符串,返回的是字符串的倒序结果,同时将每次的查询请求记录到MySQL数据库中。

    hello -> olleh
    
    1. 创建Maven项目

    在Intellij IDEA中创建一个maven项目,不再展开描述,创建后的目录结构图如下所示:



    引入Spring相关的Maven依赖,pom.xml文件:

    2. 创建目录和类

    Spring的目录结构,通常需要包括以下几部分:

    • Config:Spring的相关配置类
    • Entity:Spring Data相关的实体,Entity中的每个类对应数据库中的一张表
    • Repository: 实体对应的Repository类
    • Service:Spring的业务逻辑实现类,实现业务功能的主要代码
    • Controller:Spring的接口层,实现对HTTP请求的处理

    因此,针对之前提到的需求,构建的目录和类结构如下:


    image.png
    3. 创建基本配置

    Spring最初是仅支持以xml的方式进行Bean,Service等相关组件的配置。但随着复杂性的增加,xml的配置方式使得代码越来越冗余,且不易维护。因此,Spring开始支持使用Java Config的方式进行配置,即通过Java代码进行配置,提高了配置的可读性和可维护性。我们介绍的均是使用Java Config进行配置的方式。

    • GeneralConfig.java
    package tk.meazza.config;
    
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.PropertySource;
    
    /**
     * 每个Java Config类,均需要使用该注解,相当于xml中的beans
     */
    @Configuration
    
    /**
     * ComponentScan是每个Spring项目必须要配置的注解,它告诉Spring哪个packages包括用注解标识的类。
     * 例如,如果你有个类用@Controller注解标识了,那么,如果不加上@ComponentScan,自动扫描该controller,
     * 那么该Controller就不会被spring扫描到,更不会装入spring容器中,因此你配置的这个Controller也没有意义。
     */
    @ComponentScan(basePackages = "tk.meazza")
    
    /**
     * PropertySource指定了属性文件,Spring可以加载此文件,并通过注入Environment环境变量的方式,
     * 使用env.getProperty(key)获取数据。
     */
    @PropertySource("classpath:config.properties")
    public class GeneralConfig {
    
    }
    
    4. 单元测试

    使用spring-test和Junit4框架,可以很容易的开始单元测试的工作,快速发现Spring配置或代码中的问题。这里由于还暂时没有任何业务代码,我们先写一个简单的测试类,用来检查Spring的基本配置是否正确。

    package tk.meazza;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    import tk.meazza.config.GeneralConfig;
    
    /**
     * 改变Junit的默认执行类,这里使用Spring的执行类,使得可以在单元测试类中使用Spring的特性。
     */
    @RunWith(SpringJUnit4ClassRunner.class)
    
    /**
     * ContextConfiguration用来执行Spring配置的位置,可以使用xml,或者Java Config类。
     */
    @ContextConfiguration(classes = {GeneralConfig.class})
    public class InverterServiceTest {
    
      @Test
      public void test() {
        System.out.println("Hello!");
      }
    
    }
    

    运行test类,运行日志如下:

    一月 29, 2018 11:09:46 上午 org.springframework.test.context.support.AbstractTestContextBootstrapper getDefaultTestExecutionListenerClassNames
    信息: Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener]
    一月 29, 2018 11:09:46 上午 org.springframework.test.context.support.AbstractTestContextBootstrapper instantiateListeners
    信息: Could not instantiate TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener]. Specify custom listener classes or make the default listener classes (and their required dependencies) available. Offending class: [javax/servlet/ServletContext]
    一月 29, 2018 11:09:46 上午 org.springframework.test.context.support.AbstractTestContextBootstrapper instantiateListeners
    信息: Could not instantiate TestExecutionListener [org.springframework.test.context.transaction.TransactionalTestExecutionListener]. Specify custom listener classes or make the default listener classes (and their required dependencies) available. Offending class: [org/springframework/transaction/interceptor/TransactionAttributeSource]
    一月 29, 2018 11:09:46 上午 org.springframework.test.context.support.AbstractTestContextBootstrapper instantiateListeners
    信息: Could not instantiate TestExecutionListener [org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener]. Specify custom listener classes or make the default listener classes (and their required dependencies) available. Offending class: [org/springframework/transaction/interceptor/TransactionAttribute]
    一月 29, 2018 11:09:46 上午 org.springframework.test.context.support.AbstractTestContextBootstrapper getTestExecutionListeners
    信息: Using TestExecutionListeners: [org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@6537cf78, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@67b6d4ae, org.springframework.test.context.support.DirtiesContextTestExecutionListener@34b7bfc0]
    一月 29, 2018 11:09:46 上午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
    信息: Refreshing org.springframework.context.support.GenericApplicationContext@55f3ddb1: startup date [Mon Jan 29 11:09:46 CST 2018]; root of context hierarchy
    Hello!
    一月 29, 2018 11:09:46 上午 org.springframework.context.support.AbstractApplicationContext doClose
    信息: Closing org.springframework.context.support.GenericApplicationContext@55f3ddb1: startup date [Mon Jan 29 11:09:46 CST 2018]; root of context hierarchy
    
    Process finished with exit code 0
    

    这里代码测试类运行正常,Spring配置正常加载,可以进行下一步。

    相关文章

      网友评论

        本文标题:从零开始搭建Spring开发环境(一)

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