美文网首页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