SpringBoot 02: 初识SpringBoot

1. SpringBoot

产生原因

  • spring, springmvc框架使用上的一些缺点:

  • 需要使用的大量的配置文件

  • 还需要配置各种对象

  • 需要把使用的对象放入到spring容器中才能使用对象

  • 需要了解其他框架配置规则


  • springboot的一些直观优点:

  • SpringBoot就相当于简化了配置文件的Spring+SpringMVC(但springboot的核心还是IOC容器)

  • 常用的框架和第三方库都已经配置好了, 只需要引入使用即可

特点

  • Create stand-alone Spring applications
可以创建spring应用 
  • Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)
内嵌的tomcat, jetty, Undertow  
  • Provide opinionated 'starter' dependencies to simplify your build configuration
提供了starter起步依赖, 简化应用的配置:    比如使用MyBatis框架, 需要在Spring项目中, 需要配置MyBatis的对象, SqlSessionFactory以及Dao的代理对象 但在SpringBoot项目中, 只要在pom.xml里面加入一个mybatis-spring-boot-starter依赖 
  • Automatically configure Spring and 3rd party libraries whenever possible
尽可能去自动配置spring和第三方库, 叫做自动配置(就是把spring中的,第三方库中的对象都创建好,放到容器中,开发人员可以直接使用) 
  • Provide production-ready features such as metrics, health checks, and externalized configuration
提供了健康检查, 统计, 外部化配置 
  • Absolutely no code generation and no requirement for XML configuration
不用生成代码,不需要使用xml文件做配置 

2. SpringBoot项目

地址

@SpringBootApplication注解

  • 位于项目启动类上面,是复合注解, 包含以下注解
@SpringBootConfiguration @EnableAutoConfiguration @ComponentScan 
  • 而@SpringBootConfiguration又是包含@Configuration的符合注解
@Configuration public @interface SpringBootConfiguration {     @AliasFor(         annotation = Configuration.class     )     boolean proxyBeanMethods() default true; }  //说明使用了@SpringBootConfiguration注解标注的类,可以作为配置文件使用的,可以使用Bean声明对象,注入到容器 
  • @EnableAutoConfiguration
启用自动配置,把java对象配置好,注入到spring容器中。例如可以把mybatis的对象创建好,放入到容器中 
  • @ComponentScan
扫描器,找到注解,根据注解的功能创建对象,给属性赋值等等。默认扫描的包:@ComponentScan所在的类,以及其所在类所在的包和子包。 

SpringBoot的配置文件

  • 名称:application
  • 后缀:property(key=value) 或 yml(key:value)
  • 配置文件示例:
  • 例1:application.properties设置端口和上下文
#设置端口号 server.port=9090  #设置访问应用上下文路径,contextpath server.servlet.context-path=/myboot 
  • 例2:application.yml,配置文件的结构更加清晰,推荐使用
server:   port: 9090   servlet:     context-path:/myboot 

多环境配置文件

  • 实际场景中,项目的配置会有开发环境,测试环境,上线的环境

  • 每个环境有不同的配置信息,例如端口,上下文,数据库url,用户名,密码等等

  • 使用多环境配置文件,可以方便的切换不同的配置

  • 使用方式:创建多个配置文件,名称规则:application-环境名称.properties(或者后缀未yml格式)

  • 多环境配置文件的示例如下:

  • 创建开发环境的配置文件:application-dev.properties(或者application-dev.yml )

  • 创建测试者使用的配置:application-test.properties

  • springboot默认读取application.properties文件,故需在该文件中配置实际需要读取的核心配置文件

#以激活配置文件 application-dev.properties为例 spring.profiles.active=dev 

@ConfigurationProperties

  • 设计思想:把配置文件的数据映射到java对象的属性上,将配置文件中某些开头和prefix指定的值相同的对应配置文件中的值赋给对应属性
  • 例如:application.properties
#自定义key=value school.name=橘子 school.website=www.test.com school.address=黑龙江哈尔滨 
  • 则对应的实体类应该如下,其中name会被注入配置文件中的school.name的值,其他属性类似
@Component @ConfigurationProperties(prefix = "school") public class SchoolInfo {      private String name;      private String website;      private String address;      public String getName() {         return name;     }      public void setName(String name) {         this.name = name;     }      public String getWebsite() {         return website;     }      public void setWebsite(String website) {         this.website = website;     }      public String getAddress() {         return address;     }      public void setAddress(String address) {         this.address = address;     }      @Override     public String toString() {         return "SchoolInfo{" +                 "name='" + name + ''' +                 ", website='" + website + ''' +                 ", address='" + address + ''' +                 '}';     } } 

使用jsp

  • SpringBoot不推荐使用jsp, 而是使用模板技术代替jsp
  • 如果要使用jsp, 需要添加如下依赖,负责编译jsp文件
<dependency>     <groupId>org.apache.tomcat.embed</groupId>     <artifactId>tomcat-embed-jasper</artifactId> </dependency> 
  • 如果需要使用servlet, jsp, jstl的功能, 需要添加如下依赖
<dependency> 	<groupId>javax.servlet</groupId> 	<artifactId>jstl</artifactId> </dependency>  <dependency> 	<groupId>javax.servlet</groupId> 	<artifactId>javax.servlet-api</artifactId> </dependency>  <dependency> <groupId>javax.servlet.jsp</groupId> 	<artifactId>javax.servlet.jsp-api</artifactId> 	<version>2.3.1</version> </dependency> 
  • 创建一个存放jsp的目录, 一般为src/main/webapp目录,记得设置webapp的目录属性
  • 需要在pom.xml指定jsp文件编译后的存放目录:META-INF/resources
<resource> 	<directory>src/main/webapp</directory> 	<targetPath>META-INF/resources</targetPath> 	<includes> 		<include>**/*.*</include> 	</includes> </resource> 
  • 创建Controller, 访问jsp
  • 在application.propertis文件中配置视图解析器
#配置视图解析器 spring.mvc.view.prefix=/ spring.mvc.view.suffix=.jsp 

手动使用SpringBoot容器获取对象

  • 关注SpringBoot工程的主启动类的run方法
@SpringBootApplication public class Application {      public static void main(String[] args) {         SpringApplication.run(Application.class, args);     } } 
  • 关注上述run方法的返回值
public static ConfigurableApplicationContext run(Class<?> primarySource, String... args) {     return run(new Class[]{primarySource}, args); } 
  • 而ConfigurableApplicationContext是ApplicationContext的子接口
public interface ConfigurableApplicationContext extends ApplicationContext, Lifecycle, Closeable { } 
  • 所以接收SpringBoot主启动类的run方法的返回值就可以获取到SpringBoot容器
  • 之后便可以按照需求调用SpringBoot容器的方法获取已经注册到容器中的对象

CommandLineRunner接口 与 ApplcationRunner接口

  • 两个接口
@FunctionalInterface public interface CommandLineRunner {     void run(String... args) throws Exception; }  @FunctionalInterface public interface ApplicationRunner {     void run(ApplicationArguments args) throws Exception; } 
  • 两个接口都有一个run方法
  • SpringBoot项目的主启动类实现上述接口,重写run方法,在容器对象创建好后自动执行run()方法
  • 可以在容器对象创建好后完成一些自定义的操作
发表评论

相关文章