SpringBoot总结

10 篇文章 1 订阅

SpringBoot是spring家族中的一个全新框架,用来简化spring程序的创建和开发过程。在以往我们通过SpringMVC+Spring+Mybatis框架进行开发的时候,我们需要配置web.xml,spring配置,mybatis配置,然后整合在一起,而SpringBoot抛弃了繁琐的xml配置过程,采用大量默认的配置来简化我们的spring开发过程。SpringBoot化繁为简,使开发变得更加的简单迅速。

优点

  • 创建独立Spring应用

  • 内嵌web服务器

  • 自动starter依赖,简化构建配置

  • 自动配置Spring以及第三方功能

  • 提供生产级别的监控、健康检查及外部化配置

  • 无代码生成、无需编写XML

SpringBoot是整合Spring技术栈的一站式框架
SpringBoot是简化Spring技术栈的快速开发脚手架

缺点

  • 迭代快,需要时刻关注变化

  • 封装太深,内部原理复杂,不容易精通

入门使用

相关依赖

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
    </parent>

    <dependencies>
        <!--web场景启动器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
当引入spring-boot-starter-web模块的依赖,并会引入tomcat服务器、SpringMVC等依赖
它内嵌了Tomcat并且提供了默认的配置,比如默认端口是8080.我们可以在application.properties或者application.yml中配置更改端口号

主程序

//告诉SpringBoot,这是一个SpringBoot应用
@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        SpringApplication.run(MainApplication.class,args);
    }
}

controller层

//@ResponseBody //返回一段话,而不是跳转到某个页面
//@Controller
@RestController  //@ResponseBody与@Controller的合体
public class HelloController {

    @RequestMapping("/hello") //映射请求
    public String handle01(){
        return "Hello,SpringBoot2"; //向浏览器返回
    }

}
直接启动main方法,并访问URL: http://ip:port/hello

简单部署

 <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

把项目打成jar包,直接在目标服务器执行即可

SpringBoot还提供了其他很多starter模块

  • spring-boot-starter,核心 POM,包含自动配置支持、日志库和对 YAML 配置文件的支持。

  • spring-boot-starter-jdbc,支持使用 JDBC 访问数据库。

  • spring-boot-starter-actuator,添加适用于生产环境的功能,如性能指标和监测等功能。

  • ......

https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.build-systems.starters

常用注解

@SpringBootApplication

定义在main方法入口类处,用于启动sping boot应用项目

@EnableAutoConfiguration

让spring boot根据类路径中的jar包依赖当前项目进行自动配置

在src/main/resources的META-INF/spring.factories

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration

若有多个自动配置,用“,”隔开

@ImportResource

加载xml配置,一般是放在启动main类上

@ImportResource("classpath*:/spring/*.xml")  单个

@ImportResource({"classpath*:/spring/1.xml","classpath*:/spring/2.xml"})   多个

@Value

application.properties定义属性,直接使用@Value注入即可

@ConfigurationProperties(prefix="person")

可以新建一个properties文件,ConfigurationProperties的属性prefix指定properties的配置的前缀,通过location指定properties文件的位置

@ConfigurationProperties(prefix="person")
public class PersonProperties {
    
    private String name ;
    private int age;
}

@EnableConfigurationProperties

用 @EnableConfigurationProperties注解使 @ConfigurationProperties生效,并从IOC容器中获取bean。

@RestController

组合@Controller和@ResponseBody,当你开发一个和页面交互数据的控制时,比如bbs-web的api接口需要此注解

@RequestMapping("/api2/copper")

用来映射web请求(访问路径和参数)、处理类和方法,可以注解在类或方法上。注解在方法上的路径会继承注解在类上的路径。produces属性: 定制返回的response的媒体类型和字符集,或需返回值是json对象

@RequestMapping(value="/api2/copper",produces="application/json;charset=UTF-8",method = RequestMethod.POST)

@RequestParam

获取request请求的参数值

@ResponseBody

支持将返回值放在response体内,而不是返回一个页面。比如Ajax接口,可以用此注解返回数据而不是页面。此注解可以放置在返回值前或方法前。

@Bean

@Bean(name="bean的名字",initMethod="初始化时调用方法名字",destroyMethod="close")

定义在方法上,在容器内初始化一个bean实例类。

@Service

用于标注业务层组件

@Controller

用于标注控制层组件(如struts中的action)

@Repository

用于标注数据访问组件,即DAO组件

@Component

泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

@PostConstruct

spring容器初始化时,要执行该方法

@PostConstruct  
public void init() {   
}   

@PathVariable

用来获得请求url中的动态参数

@ComponentScan

注解会告知Spring扫描指定的包来初始化Spring

@EnableZuulProxy

路由网关的主要目的是为了让所有的微服务对外只有一个接口,我们只需访问一个网关地址,即可由网关将所有的请求代理到不同的服务中。Spring Cloud是通过Zuul来实现的,支持自动路由映射到在Eureka Server上注册的服务。Spring Cloud提供了注解@EnableZuulProxy来启用路由代理。

@Autowired

在默认情况下使用 @Autowired 注释进行自动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个。当找不到一个匹配的 Bean 时,Spring 容器将抛出 BeanCreationException 异常,并指出必须至少拥有一个匹配的 Bean。

当不能确定 Spring 容器中一定拥有某个类的 Bean 时,可以在需要自动注入该类 Bean 的地方可以使用 @Autowired(required = false),这等于告诉 Spring: 在找不到匹配 Bean 时也不报错

@Configuration

表示这是一个配置信息类,可以给这个配置类也起一个名称

@Import(Config1.class)

导入Config1配置类里实例化的bean

@Order

@Order(1),值越小优先级超高,越先运行

@ConditionalOnExpression

开关为true的时候才实例化bean

@ConditionalOnProperty

这个注解能够控制某个 @Configuration 是否生效。具体操作是通过其两个属性name以及havingValue来实现的,其中name用来从application.properties中读取某个属性值,如果该值为空,则返回false;如果值不为空,则将该值与havingValue指定的值进行比较,如果一样则返回true;否则返回false。如果返回值为false,则该configuration不生效;为true则生效。

@ConditionalOnClass

该注解的参数对应的类必须存在,否则不解析该注解修饰的配置类

@ConditionalOnMisssingClass({ApplicationManager.class})

如果存在它修饰的类的bean,则不需要再创建这个bean;

@ConditionOnMissingBean(name = "example")

表示如果name为“example”的bean存在,该注解修饰的代码块不执行。

自动装配原理

starter场景启动器

  • 见到很多spring-boot-starter-*:*就是某种场景

  • 只要引入starter,这个场景的所有常规需要的依赖我们都会自动引入

  • SpringBoot所有支持的场景

  • 见到的 *-spring-boot-starter: 第三方为我们提供的简化开发的场景启动器。

  • 所有场景启动器最底层的依赖

      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter</artifactId>
          <version>2.3.4.RELEASE</version>
          <scope>compile</scope>
    </dependency>
  • 无需关注版本号,自动版本仲裁

  • 引入依赖默认都可以不写版本

  • 引入非版本仲裁的jar,一定要写版本号

  • 可以修改版本号

     <properties>
        <mysql.version>5.1.43</mysql.version>
    </properties>

自动配置

  • 自动配好Tomcat

  • 引入Tmocat依赖

  • 配置Tomcat

  • 自动配好SpringMVC

  • 引入SpringMVC全套组件

  • 自动配好SpringMVC常用组件(功能)

  • 自动配好Web常见功能,如:字符编码问题

  • SpringBoot帮我们配置好了所有web开发的常见场景

  • 默认的包结构

  • 主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来

  • 各种配置拥有默认值

  • 默认配置最终都是映射到MultipartProperties

  • 配置文件的值最终会绑定每个类上,这个类会在容器中创建对象

  • 按需加载所有自动配置项

  • 引入了哪些场景这个场景的自动配置才会开启

  • SpringBoot所有的自动配置功能都在spring-boot-autoconfigure包里面

导入相关的包,相关的包中有类,@ConditionalOnClass只有有这些类,这些自动配置类才能生效

总结

  • SpringBoot先加载所有的自动配置类 xxxxAutoConfiguration

  • 每个自动配置类按照条件进行生效,默认都会绑定配置文件指定的值,xxxxProperties里面拿。xxxxProperties和配置文件进行绑定

  • 生效的配置类就会给容器中装配很多的组件,只要容器中有这些组件,相当于这些功能就有了

  • 只要用户有自己配置的,就以用户的优先

  • 定制化

  • 用户直接自己@Bean替换底层的组件

  • 用户去看组件是获取的配置文件什么值就去修改

#例如
server.servlet.encoding.charset=GBK 
xxxxAutoConfiguration----->组件----->xxxxProperties里面拿值---->application.properties

dev-tools

项目或者页面修改以后:Ctrl+F9;就能实时生效

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

Spring Initailizr(项目初始化向导

可以在创建项目时选择我们需要的开发场景,最后会帮我们把场景依赖引入,自动构建好项目结构,同时还会编写好主配置类

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

像向日葵一样~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值