springboot结构(如何构建spring boot)
本文目录
如何构建spring boot
Spring Boot充分利用了JavaConfig的配置模式以及“约定优于配置”的理念,能够极大的简化基于Spring MVC的Web应用和REST服务开发。Spring 4倡导微服务的架构,针对这一理念,近来在微博上也有一些有价值的讨论,如这里和这里。微服务架构倡导将功能拆分到离散的服务中,独立地进行部署,Spring Boot能够很方便地将应用打包成独立可运行的JAR包,因此在开发模式上很契合这一理念。目前,Spring Boot依然是0.5.0的里程碑版本,因此相关的文档尚不完善,本文将会以一个简单的样例来介绍基于这个项目的开发过程。要Spring Boot进行功能开发,需要使用Gradle或者Maven作为构建工具。在本例中,我们会使用Eclipse和Maven插件进行开发。要使用Spring Boot,首先创建一个Maven工程,并修改Maven主要的配置文件pom.xml,如下所示:《parent》 《groupId》org.springframework.boot《/groupId》 《artifactId》spring-boot-starter-parent《/artifactId》 《version》0.5.0.M7《/version》 《/parent》 《dependencies》 《dependency》 《groupId》org.springframework.boot《/groupId》 《artifactId》spring-boot-starter-web《/artifactId》 《/dependency》 《dependency》 《groupId》org.thymeleaf《/groupId》 《artifactId》thymeleaf-spring3《/artifactId》 《/dependency》 《/dependencies》 《properties》 《start-class》com.levin.Application《/start-class》 《/properties》 《build》 《plugins》 《plugin》 《groupId》org.springframework.boot《/groupId》 《artifactId》spring-boot-maven-plugin《/artifactId》 《/plugin》 《/plugins》 《/build》 《repositories》 《repository》 《id》spring-milestone《/id》***隐藏网址*** 《snapshots》 《enabled》false《/enabled》 《/snapshots》 《/repository》 《/repositories》 《pluginRepositories》 《pluginRepository》 《id》spring-milestone《/id》***隐藏网址*** 《snapshots》 《enabled》false《/enabled》 《/snapshots》 《/pluginRepository》 《/pluginRepositories》在上面的配置中,需要将工程的parent设置为spring-boot-starter-parent,并添加对spring-boot-starter-web的依赖,这样我们就无需设置各个依赖项及其版本信息了。并且在构建中要声明使用spring-boot-maven-plugin这个插件,它会对Maven打包形成的JAR进行二次修改,最终产生符合我们要求的内容结构。在我们的应用中将要发布一个REST服务,显示一个基本的用户信息,首先定义一个简单的模型类: package com.levin;public class Person {private String name;private String email; public Person(String name, String email) {this.name = name;this.email = email;} public String getName() {return name;}public void setName(String name) {this.name = name;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;} }接下来,我们需要声明一个Spring MVC的Controller,响应对实体的请求:@Controllerpublic class ShowPersonController { @RequestMapping("/showPerson") public @ResponseBody Person showPerson() { return new Person("levinzhang","levinzhang1981@gmail.com"); }}这个类与我们在使用Spring MVC定义Controller时并无任何差别。接下来,我们需要声明一个主类启动这个应用程序:@ComponentScan@EnableAutoConfigurationpublic class Application { public static void main(String args) { SpringApplication.run(Application.class, args); }}这个类的main方法中使用了SpringApplication帮助类,并以Application这个类作为配置来启动Spring的应用上下文。在这个类中使用了ComponentScan以及EnableAutoConfiguration注解,其中ComponentScan注解会告知Spring扫描指定的包来初始化Spring Bean,这能够确保我们声明的Bean能够被发现。EnableAutoConfiguration将会启动自动配置模式,在我们的配置中会将对Tomcat的依赖级联进来,因此在应用启动时将会自动启动一个嵌入式的Tomcat,因为在样例中使用了Spring MVC,所以也会自动注册所需的DispatcherServlet,这都不需要类似web.xml这样的配置。在Eclipse中要运行这个应用的话,可以直接以Java Application的形式来运行这个main函数,此时会启动应用,我们在浏览器中可以看到如下的运行效果,这就是我们想要的REST服务:在开发调试完成之后,可以将应用打成JAR包的形式,在Eclipse中可以直接使用Maven插件的package命令,最终会形成一个可运行的JAR包。我们使用java –jar命令就可以运行这个JAR包了。所呈现出的效果与在调试期是一样的。现在看一下这个JAR包解压后的目录结构:这个JAR包与传统JAR包的不同之处在于里面有一个名为lib的目录,在这个目录中包含了这个简单应用所依赖的其他JAR包,其中也包含内置的嵌入式Tomcat,正是使用它,才能发布服务和访问Web资源。除了我们编写的源码所编译形成的CLASS以外,在org目录下还有许多Spring所提供的CLASS,正是依赖这些CLASS,才能够加载位于lib目录下JAR中的类。这样的加载机制与在OSGi bundle中声明Bundle-Classpath很类似,不过在OSGi中会由容器来负责加载指定路径下的类。这大致阐述了这样一个JAR包能够发布服务的原因。如果我们想要使用HTML、JSP等Web资源的话,在Controller中直接返回对应的视图就可以了。如果我们想要将这个JAR包转换成可以在Servlet容器中部署的WAR的话,就不能依赖于Application的main函数了,而是要以类似于web.xml文件配置的方式来启动Spring应用上下文,此时我们需要声明这样一个类:public class HelloWebXml extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(Application.class); }}这个类的作用与在web.xml中配置负责初始化Spring应用上下文的监听器作用类似,只不过在这里不需要编写额外的XML文件了。如果要将最终的打包形式改为WAR的话,还需要对pom.xml文件进行修改,除了需要将packaging的值修改为war以外,还需要对依赖进行适当的配置(这一部分在Spring Boot的样例和文档中均未提及,提醒大家注意):《dependency》 《groupId》org.springframework.boot《/groupId》 《artifactId》spring-boot-starter-web《/artifactId》 《exclusions》 《exclusion》 《groupId》org.springframework.boot《/groupId》 《artifactId》spring-boot-starter-tomcat《/artifactId》 《/exclusion》 《/exclusions》 《/dependency》在这里需要移除对嵌入式Tomcat的依赖,这样打出的WAR包中,在lib目录下才不会包含Tomcat相关的JAR包,否则将会出现启动错误。另外,在移除对Tomcat的依赖后,为了保证编译正确,还需要添加对servlet-api的依赖,因此添加如下的配置: 《dependency》 《groupId》org.apache.tomcat《/groupId》 《artifactId》tomcat-servlet-api《/artifactId》 《version》7.0.42《/version》 《scope》provided《/scope》《/dependency》在这里将scope属性设置为provided,这样在最终形成的WAR中不会包含这个JAR包,因为Tomcat或Jetty等服务器在运行时将会提供相关的API类。此时,执行mvn package命令就会得到一个WAR文件,我们可以直接将其放到Tomcat下运行(需要7.0.42版本以上)。以上介绍了基于Spring Boot开发应用的过程,目前它的文档尚不完善,但是在GitHub上有不少的样例,包括与Spring Data集成访问数据库(关系型以及非关系型)、安全、WebSocket等,读者感兴趣可以下载运行,需要注意的是有些样例中使用的是0.5.0.M6版本,这个版本有问题,运行时会出错,建议手动修改为0.5.0.M7或快照版本。基于以上的介绍,希望读者能够对Spring Boot这个新项目有所了解。它简化了JAR包管理和相关基础设施环境的配置,能够帮助我们快速开发Web应用或构建REST服务,希望它能够尽快完善成熟,更多地用于实践,提升开发效率。
Spring Boot项目目录结构
根目录: com.example.demo 1)启动类( gApplication.java ) 推荐放在根目录com.example.demo包下 2)实体类( domain ) 3)数据接口访问层( Dao ) 4)数据服务接口层( Service )推荐:com.example.demo.service 5)数据服务实现层( Service Implements )推荐:com.example.demo.service.impl 使用idea的同学推荐使用com.example.demo.serviceImpl目录 6)前端控制器层( Controller )推荐:com.example.demo.controller 7)工具类库( utils )推荐:com.example.demo.utils 8)配置类( config )推荐:com.example.demo.config 9)数据传输对象( dto )推荐:com.example.demo.dto 10)视图包装对象( vo )推荐:com.example.demo.vo 根目录: resources 1) 项目配置文件 :resources/application.yml 2) 静态资源目录 :resources/static/ 用于存放html、css、js、图片等资源 3) 视图模板目录 :resources/templates/ 用于存放jsp、thymeleaf等模板文件 4) mybatis映射文件 :resources/mapper/(mybatis项目) 5) mybatis配置文件 :resources/mapper/config/(mybatis项目)
SpringBoot目录结构
以Maven工程形式新建一个springboot项目。目录结构如下: 重点介绍resources目录: 在resources文件夹或与其并列的文件夹下建立public文件夹,在public文件夹下的html文件可以通过浏览器中输入文件+后缀名的方式直接访问的. 一、public文件夹(需要自己手动新建),就相当于在eclipse的web项目中的WEB-INF文件夹外的文件,是不需要通过服务器内部进行访问的。 二、templates文件夹,是放置模板文件的,因此需要视图解析器来解析它。所以必须通过服务器内部进行访问,也就是要走控制器--服务--视图解析器这个流程才行。 三、static文件夹,既不能直接访问,也不能通过服务器访问到。因此,这个文件夹,可能是放一些css、图片这样的文件供服务器内部引用。 application.properties文件,全局配置文件。才疏学浅之处,切莫在意。 ——2019.6.10 下午
SpringBoot项目结构及功能
在IntelliJ使用 Spring Initializer快速创建项目
这是pom文件中父项目,再进一步查看其 spring-boot-starter-parent
发现真正管理Spring Boot应用里面的所有依赖版本的地方在这 spring-boot-dependencies Spring Boot的版本仲裁中心; 以后我们导入依赖默认是不需要写版本;(没有在dependencies里面管理的依赖自然需要声明版本号) 再往下看:
这是spring boot的web场景启动器,只要引入了它,就能帮我们导入了web模块正常运行所依赖的组件;
@SpringBootApplication: Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;
@SpringBootConfiguration:Spring Boot的配置类:标注在某个类上,表示这是一个Spring Boot的配置类; @Configuration:配置类上来标注这个注解; 配置类 ----- 配置文件;配置类也是容器中的一个组件;@Component
@EnableAutoConfiguration:开启自动配置功能; 以前我们需要配置的东西,Spring Boot帮我们自动配置;@EnableAutoConfiguration告诉SpringBoot开启自动配置功能;这样自动配置才能生效;
在src下创建一个controller包,新建一个HelloController类,之后运行springboot,便可以通过 localhost:/8080/hello 来访问hello页面。
SpringBoot使用一个全局的配置文件,配置文件名是固定的; • application.properties • application.yml 配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好;
springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件 –file:./config/ –file:./ –classpath:/config/ –classpath:/ 优先级由高到底,高优先级的配置会覆盖低优先级的配置; SpringBoot会从这四个位置全部加载主配置文件;互补配置;
application.yml
@Value获取值和@ConfigurationProperties获取值比较 配置文件yml还是properties他们都能获取到值; 如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value; 如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties; ==我们还可以通过spring.config.location来改变默认的配置文件位置== 项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;指定配置文件和默认加载的这些配置文件共同起作用形成互补配置; java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.location=G:/application.properties
springboot是bs还是cs
是bs结构从本质上来说,springboot是一个专注于框架的框架。Spring Boot就是对各种框架的整合,让他们集成在一起更加简单,简化了我们在集成过程中的模板化配置,它做了那些没有它你自己也会去做的Spring Bean配置。SpringBoot是一个框架,一种全新的编程规范,他的产生简化了框架的使用,所谓简化是指简化了Spring众多框架中所需的大量且繁琐的配置文件,所以 SpringBoot是一个服务于框架的框架,服务范围是简化配置文件。
更多文章:
“人在江湖飘,怎能不挨刀!”请说说这些年你都掉过哪些至今都印象深刻的坑?有人说“人在江湖飘,必须厚脸皮”,你怎么看
2024年5月16日 06:39
暗黑破坏神暗月版(暗黑破坏神2:暗月世界单机游戏你觉得哪个人物最好用,为何我用骑士)
2024年5月17日 22:45
数字星空的介绍?卡巴斯基官网上下载安全软件2015,为什么都是第三方
2024年1月17日 10:00
为什么我一开电脑就会显示自能ABC,而不是自己按?如何让智能ABC打字速度更快
2024年5月19日 04:19
download google play(怎么下载Googleplay账户)
2024年6月26日 03:37