IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringBoot之自定义场景启动器 -> 正文阅读

[Java知识库]SpringBoot之自定义场景启动器

1. 场景启动器

Spring Boot的自动配置原理中不可或缺的就是那些已经定义好的场景启动器,只要导入某个场景启动器我们的应用就拥有了该场景下的一些核心Bean,有利于快速开发,比如引入Web的场景启动器:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

我们就可以快速开发Web服务,Spring Boot官方提供了众多的场景启动器供开发者使用,但这些场景启动器也并不能满足开发者各式各样的需求。比如Dubbo很好用,我们希望能够有一个Dubbo的场景启动器能够快速使用Dubbo的功能,因此阿里就推出了dubbo-spring-boot-starter的场景启动器,这也是延续了Spring的整合一切的思想。

2. 命名规则

场景启动器的命名其实本身可以随意命名,但在JAVA领域总有一些约定,比如类名、方法名要见名知意,Spring Boot官方自己出产的场景启动器都是以spring-boot-starter开头再加模块名称,比如:

  • spring-boot-starter-web
  • spring-boot-starter-jdbc
  • spring-boot-starter-cache

非官方出产的场景启动器都是以模块名称开头再加spring-boot-starter,比如:

  • mybatis-spring-boot-starter
  • dubbo-spring-boot-starter

3. 开发规则

场景启动器帮我们做了什么?

  • 场景启动器帮我们引入了某个场景下所需要的依赖JAR
  • 提供了自动配置类给IOC容器注入该场景下的核心Bean

其中自动配置类会用到很多条件注解来判断是否符合场景,Spring Boot提供的条件注解如下:

注解作用
@ConditionalOnBean判断某个Bean是否存在
@ConditionalOnClass判断某个class是否存在
@ConditionalOnExpression判断某个表达式是否成立
@ConditionalOnJava判断是否是运行的指定版本的JAVA
@ConditionalOnJndi判断指定资源是否是通过JNDI加载
@ConditionalOnMissingBean判断某个Bean是否不存在
@ConditionalOnMissingClass判断某个class是否不存在
@ConditionOnWebApplication判断是否是Web应用
@ConditionOnProperty判断某个配置是否是指定的内容
@Conditional设置实现Condition接口的类,实现自定义条件

例如缓存场景启动器的自动配置类CacheAutoConfiguration如下:

在这里插入图片描述

4. 自定义场景启动器

定义一个场景启动器,名称为:hello-spring-boot-starter,该启动器提供一个核心Bean,名称为helloBean,可以输出启动器的名称,工程结构如下:

在这里插入图片描述

4.1 开发场景启动器

  • 在【hello-spring-boot-starter】工程中的pom文件中引入如下依赖:
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <version>2.3.5.RELEASE</version>
    </dependency>
</dependencies>
  • 在【hello-spring-boot-starter】工程中创建核心类,类名称:HelloBean,具体内容如下:
public class HelloBean
{
    /**
     * 输出场景启动器名称
     */
    public void printHello()
    {
        System.out.println("hello-spring-boot-starter");
    }
}
  • 在【hello-spring-boot-starter】工程中创建自动配置类,类名称:HelloAutoConfiguration,只有在Web应用中才生效,内容如下:
@Configuration
@ConditionalOnWebApplication // 在Web应用中才可以
public class HelloAutoConfiguration
{
    @Bean
    public HelloBean helloBean()
    {
        return new HelloBean();
    }
}
  • 在【hello-spring-boot-starter】工程中的META-INF目录下创建spring.factories文件,内容如下:
// 让Spring Boot启动时自动给我们装配
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.xxxx.hello.HelloAutoConfiguration

4.2 应用场景启动器

  • 在【spring-boot-web-example】工程中的pom文件中引入web和自定义的hello场景启动器,内容如下:
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>com.xxxx</groupId>
        <artifactId>hello-spring-boot-starter</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>
  • 在【spring-boot-web-example】工程中新建应用程序启动类,类名称:SpringServiceApplication,内容如下:
@SpringBootApplication
public class SpringServiceApplication implements ApplicationRunner
{
    @Autowired
    private HelloBean helloBean;

    public static void main(String[] args)
    {
        // 启动应用程序
        SpringApplication.run(SpringServiceApplication.class);
    }

    @Override
    public void run(ApplicationArguments args) throws Exception
    {
        // 打印自定义场景启动器名称
        helloBean.printHello();
    }
}
  • 启动应用测试如下:

在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-02-28 15:14:49  更:2022-02-28 15:17:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:52:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码