SpringBoot快速入门(二)

一、SpringBoot原理分析

1.1 SpringBoot自动配置

(1). Condition

Condition是在Spring4.0增加的条件判断功能,通过这个功能可以实现选择性的创建Bean操作

SpringBoot是如何知道要创建哪个Bean的?

比如SpringBoot是如何知道要创建ReadisTemplate的?

案例:需求

在Spring的IOC容器中有一个User 的 Bean,现要求:

  • 导入Jedis坐标后,加载该Bean,没导入,则不加载
  • 将类的判断定义为动态的。判断哪个字节码文件存在可以动态指定
小结
  • 自定义条件:
    • 定义条件类:自定义类实现Condition接口,重写matches方法,在matches方法中进行逻辑判断,返回boolean之。matches方法两个参数:
      • context:上下文对象,可以获取属性值,获取类加载器,获取BeanFactory等
      • metadata:元数据对象,用于获取注解属性。
    • 判断条件:在初始化Bean时,使用@Conditional(条件类.class)注解
  • SpringBoot提供的常用注解:
    • ConditionalOnProperty:判断配置文件中是否有对应属性和值才初始化Bean
    • ConditionalOnClass:判断环境中是否有对应字节码文件才初始化Bean
    • ConditionalOnMissingBean:判断环境中有没有对应Bean才初始化Bean

(2). 切换内置web服务器

SpringBoot的web环境中默认使用tomcat作为内置服务器,其实SpringBoot中提供了4中内置服务器供我们选择,我们可以很方便的进行切换

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <!--先排除掉Tomcat服务器-->
    <exclusions>
        <exclusion>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <groupId>org.springframework.boot</groupId>
        </exclusion>
    </exclusions>
</dependency>

<!--导入其他服务器坐标-->
<dependency>
    <artifactId>spring-boot-starter-jetty</artifactId>
    <groupId>org.springframework.boot</groupId>
</dependency>

(3). Enable*注解

SpringBoot中提供了很多Enable开头的注解,这些注解都是用与动态启用某些功能的。而其底层原理是使用@Import注解导入一些配置类,实现Bean的动态加载

SpringBoot工程是否直接可以获取jar包中定义的Bean呢?

(4). Import注解

@Enable*底层依赖于@Import注解导入一些类,使用@Import导入的类会被Spring加载到IOC容器中。而@Import提供4种用法:

  • 导入Bean
  • 导入配置类
  • 导入ImportSelector实现类。一般用于加载配置文件中的类
  • 导入ImportBeanDefinitionRegistrar实现类

(5). EnableAutoConfiguration 注解

  • @EnableAutoConfiguration注解内部使用@Import(AutoConfigurationImportSelector.class)来加载配置类
  • 配置文件位置:META-INF/spring.factories,该配置文件中定义了大量的配置类,当SpringBoot应用启动时,会自动加载这些配置类,初始化Bean
  • 并不是所有的Bean都会被初始化,在配置类中使用Condition来加载满足条件的Bean

1.2 SpringBoot监听机制

SpringBoot的监听机制,其实是对Java提供的事件监听机制的封装。

Java中的事件监听机制定义了一下几个角色:

  • 事件:Event,继承java.util.EventObject类的对象
  • 事件源:Source,任意对象Object
  • 监听器:Listener,实现java.util.EventListe接口的对象

SpringBoot监听机制

SpringBoot在项目启动时,会对几个监听器进行回调,我们可以实现这些监听器接口,在项目启动时完成一些操作。

ApplicationContextInitializer、SpringApplicationRunListener、CommandLineRunner、ApplicationRuner

1.3 SpringBoot启动流程分析

(1). 初始化

(2). run

二、SpringBoot监控

SpringBoot自带监控功能Actuator,可以帮助实现对程序内部运行情况监控,比如监控状况、Bean加载情况、配置属性、日志信息等。

将所有的监控endpoint暴露出来

management.endpoints.web.exposure.include=*

Spring Boot Admin

  • Spring Boot Admin 是一个开源社区,用于管理和监控SpringBoot应用程序
  • Spring Boot Admin 有两个角色,客户端(Client)和服务端(Service)
  • 应用程序作为Spring Boot Admin Client向Spring Boot Admin Service注册
  • Spring Boot Admin Service 的UI界面将Spring Boot Admin Client的Actuator Endpoint上的一些监控信息。

使用步骤

admin-service:

  • 创建admin-service模块
  • 导入依赖坐标admin-starter-service
  • 在引导类上启动用监控功能@EnablaAdminService

admin-client:

  • 创建admin-client模块
  • 导入依赖坐标admin-starter-client
  • 配置相关信息:server地址等
  • 启动server和client服务,访问server

三、SpringBoot项目部署

SpringBoot项目开发完毕后,支持两种方式部署到服务器:

  • jar包(官方推荐)
  • war包
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

凯凯凯凯.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值