SpringBoot非官方教程 | 第一篇:构建第一个SpringBoot工程

转载请标明出处:
https://www.fangzhipeng.com/springboot/2017/07/11/springboot1
本文出自方志朋的博客

简介

spring boot 它的设计目的就是为例简化开发,开启了各种自动装配,你不想写各种配置文件,引入相关的依赖就能迅速搭建起一个web工程。它采用的是建立生产就绪的应用程序观点,优先于配置的惯例。

可能你有很多理由不放弃SSM,SSH,但是当你一旦使用了springboot ,你会觉得一切变得简单了,配置变的简单了、编码变的简单了,部署变的简单了,感觉自己健步如飞,开发速度大大提高了。就好比,当你用了IDEA,你会觉得再也回不到Eclipse时代一样。另,本系列教程全部用的IDEA作为开发工具。

建构工程

你需要:

  • 15分钟
  • jdk 1.8或以上
  • maven 3.0+
  • Idea

打开Idea-> new Project ->Spring Initializr ->填写group、artifact ->钩上web(开启web功能)->点下一步就行了。

工程目录

创建完工程,工程的目录结构如下:

- src
	-main
		-java
			-package
				-SpringbootApplication
		-resouces
			- statics
			- templates
			- application.yml
	-test
- pom

    • pom文件为基本的依赖管理文件
    • resouces 资源文件
      • statics 静态资源
      • templates 模板资源
      • application.yml 配置文件
    • SpringbootApplication程序的入口。

    pom.xml的依赖:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    
    &lt;groupId&gt;com.forezp&lt;/groupId&gt;
    &lt;artifactId&gt;springboot-first-application&lt;/artifactId&gt;
    &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt;
    &lt;packaging&gt;jar&lt;/packaging&gt;
    
    &lt;name&gt;springboot-first-application&lt;/name&gt;
    &lt;description&gt;Demo project for Spring Boot&lt;/description&gt;
    
    &lt;parent&gt;
    	&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
    	&lt;artifactId&gt;spring-boot-starter-parent&lt;/artifactId&gt;
    	&lt;version&gt;1.5.2.RELEASE&lt;/version&gt;
    	&lt;relativePath/&gt; &lt;!-- lookup parent from repository --&gt;
    &lt;/parent&gt;
    
    &lt;properties&gt;
    	&lt;project.build.sourceEncoding&gt;UTF-8&lt;/project.build.sourceEncoding&gt;
    	&lt;project.reporting.outputEncoding&gt;UTF-8&lt;/project.reporting.outputEncoding&gt;
    	&lt;java.version&gt;1.8&lt;/java.version&gt;
    &lt;/properties&gt;
    
    &lt;dependencies&gt;
    	&lt;dependency&gt;
    		&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
    		&lt;artifactId&gt;spring-boot-starter-web&lt;/artifactId&gt;
    	&lt;/dependency&gt;
    
    	&lt;dependency&gt;
    		&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
    		&lt;artifactId&gt;spring-boot-starter-test&lt;/artifactId&gt;
    		&lt;scope&gt;test&lt;/scope&gt;
    	&lt;/dependency&gt;
    &lt;/dependencies&gt;
    
    &lt;build&gt;
    	&lt;plugins&gt;
    		&lt;plugin&gt;
    			&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
    			&lt;artifactId&gt;spring-boot-maven-plugin&lt;/artifactId&gt;
    		&lt;/plugin&gt;
    	&lt;/plugins&gt;
    &lt;/build&gt;
    

    </project>

      其中spring-boot-starter-web不仅包含spring-boot-starter,还自动开启了web功能。

      功能演示

      说了这么多,你可能还体会不到,举个栗子,比如你引入了Thymeleaf的依赖,spring boot 就会自动帮你引入SpringTemplateEngine,当你引入了自己的SpringTemplateEngine,spring boot就不会帮你引入。它让你专注于你的自己的业务开发,而不是各种配置。

      再举个栗子,建个controller:

      import org.springframework.web.bind.annotation.RestController;
      import org.springframework.web.bind.annotation.RequestMapping;
      

      @RestController
      public class HelloController {

      @RequestMapping("/")
      public String index() {
          return "Greetings from Spring Boot!";
      }
      

      }

        启动SpringbootFirstApplication的main方法,打开浏览器localhost:8080,浏览器显示:

        Greetings from Spring Boot!

        神奇之处:
        • 你没有做任何的web.xml配置。
        • 你没有做任何的sping mvc的配置; springboot为你做了。
        • 你没有配置tomcat ;springboot内嵌tomcat.
        启动springboot 方式

        cd到项目主目录:

        mvn clean  
        mvn package  编译项目的jar
        
         
         
        • 1
        • 2
        • mvn spring-boot: run 启动
        • cd 到target目录,java -jar 项目.jar

        来看看springboot在启动的时候为我们注入了哪些bean

        在程序入口加入:

        @SpringBootApplication
        public class SpringbootFirstApplication {
        
        public static void main(String[] args) {
        	SpringApplication.run(SpringbootFirstApplication.class, args);
        }
        
        @Bean
        public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
        	return args -&gt; {
        
        		System.out.println("Let's inspect the beans provided by Spring Boot:");
        
        		String[] beanNames = ctx.getBeanDefinitionNames();
        		Arrays.sort(beanNames);
        		for (String beanName : beanNames) {
        			System.out.println(beanName);
        		}
        
        	};
        }
        

        }

        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21
        • 22
        • 23
        • 24
        • 25

        程序输出:

        Let’s inspect the beans provided by Spring Boot:
        basicErrorController
        beanNameHandlerMapping
        beanNameViewResolver
        characterEncodingFilter
        commandLineRunner
        conventionErrorViewResolver
        defaultServletHandlerMapping
        defaultViewResolver
        dispatcherServlet
        dispatcherServletRegistration
        duplicateServerPropertiesDetector
        embeddedServletContainerCustomizerBeanPostProcessor
        error
        errorAttributes
        errorPageCustomizer
        errorPageRegistrarBeanPostProcessor


        在程序启动的时候,springboot自动诸如注入了40-50个bean.

        单元测试

        通过@RunWith() @SpringBootTest开启注解:

        @RunWith(SpringRunner.class)
        @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
        public class HelloControllerIT {
        
        @LocalServerPort
        private int port;
        
        private URL base;
        
        @Autowired
        private TestRestTemplate template;
        
        @Before
        public void setUp() throws Exception {
            this.base = new URL("http://localhost:" + port + "/");
        }
        
        @Test
        public void getHello() throws Exception {
            ResponseEntity&lt;String&gt; response = template.getForEntity(base.toString(),
                    String.class);
            assertThat(response.getBody(), equalTo("Greetings from Spring Boot!"));
        }
        

        }

        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21
        • 22
        • 23
        • 24
        • 25

        运行它会先开启sprigboot工程,然后再测试,测试通过 .

        源码下载:https://github.com/forezp/SpringBootLearning

        结语

        市面上有很多springboot的书,有很多springboot的博客,为什么我还要写这样一个系列?到目前为止,我没有看过一本springboot的书,因为还没来得及看,看的都是官方指南,当然也参考了很多的博客,他们都写的非常的棒!在看官方指南和博客的时候,发现他们有很多不同之处,所以我打算写一个来源于官方,通过自己理解加整合写一个系列,所以取名叫《springboot 非官方教程》。我相信我写的可能跟其他人的写的会不太一样。另外,最主要的原因还是提高自己,怀着一个乐于分享的心,将自己的理解分享给更多需要的人。

        更多阅读

        史上最简单的 SpringCloud 教程汇总

        SpringBoot教程汇总

        Java面试题系列汇总

        参考资料

        Building an Application with Spring Boot


        扫码关注公众号有惊喜

        (转载本站文章请注明作者和出处 方志朋的博客

                </div>
        					<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-2011a91181.css" rel="stylesheet">
                    </div>
        </article>
        
        • 1
          点赞
        • 0
          收藏
          觉得还不错? 一键收藏
        • 3
          评论

        “相关推荐”对你有帮助么?

        • 非常没帮助
        • 没帮助
        • 一般
        • 有帮助
        • 非常有帮助
        提交
        评论 3
        添加红包

        请填写红包祝福语或标题

        红包个数最小为10个

        红包金额最低5元

        当前余额3.43前往充值 >
        需支付:10.00
        成就一亿技术人!
        领取后你会自动成为博主和红包主的粉丝 规则
        hope_wisdom
        发出的红包
        实付
        使用余额支付
        点击重新获取
        扫码支付
        钱包余额 0

        抵扣说明:

        1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
        2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

        余额充值