ホームページ Java &#&はじめる スプリングブーツの原理は何ですか?

スプリングブーツの原理は何ですか?

Jun 16, 2020 pm 02:14 PM
spring boot

スプリングブーツの原理は何ですか?

Spring Boot の原理とは:

1. 内容の紹介

「Spring Boot Experience」を通じて Spring Boot を紹介しました。 " 何ができるでしょうか? この記事では、Spring Boot を全体的に合理的に理解できるように、主にそのさまざまな機能点の基本的な実装アイデアを分析します。

  • #依存関係管理: Spring Boot は多くのスターターを行ってきましたが、スターターは依存関係をインポートしてプロジェクトの依存関係管理を簡素化するための入り口にすぎません

  • 自動構成: Spring Boot は、Spring コード構成に基づいて多くの一般的なコンポーネントとフレームワークの構成クラスを提供するため、プロジェクト構成が簡素化されます

  • 組み込みコンテナー: Java を統合して開発を簡素化する一般的な Web コンテナー環境構築。Web アプリケーションを実行可能ファイルにパッケージ化するプラグインのパッケージ化の基礎です。

  • Maven プラグイン: 直接実行できる jar ファイルまたは war ファイルをパッケージ化するために使用されます。 、すぐに使用できるプロジェクト用。サポートを提供するために使用します。もちろん、開発を支援するための小さな機能がいくつかあります。

  • ホット スタート: コンテナーの繰り返し起動の数を減らします。開発プロセスを改善し、開発効率を向上させます。

  • アプリケーション監視: アプリケーションの監査、健全性監視、およびメトリック データ収集のための基本サービスを提供します

  • CLI (コマンドline ツール): ラピッド プロトタイピングの場合、

2 を使用する必要はありません。スターターの依存関係: starter

通常の Maven プロジェクトで、特定のフレームワークまたはコンポーネントでは、多数の依存関係をインポートする必要があり、依存関係のバージョンの一致などに注意を払う必要があります。問題は、Spring Boot が多数のスターターを提供していることです。そのようなスターターは、Maven の依存関係転送を使用します。関連する依存関係をインポートするのに役立ちます。たとえば、次の pom ファイルは、Spring Web、Spring MVC などの Web 関連の依存関係を追加します。

    .......    <dependencies>
        <!--Web应用程序的典型依赖项-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.1.1.RELEASE</version>
        </dependency>

    </dependencies>
    .......
ログイン後にコピー

Principle: 依存関係 をインポートしましたが、依存関係Web 開発で使用される多数のパッケージをインポートするには、Maven の依存関係の転送を使用します。この依存関係に対応する ファイルを解凍すると、jar が見つかります。ファイル 実際には、これは単なる pom プロジェクトであるため、その中には実質的なコンテンツはありません。実質的なコンテンツは、パッケージに対応する ファイルにあります。これは、jar ファイルをダウンロードするときにダウンロードされた mavne によって作成され、spring-webmvc、spring-web などの多くの依存関係がファイル内で宣言されます。

つまり、プロジェクトが特定のスターターに依存している場合、そのスターターは他の多くの依存関係に依存し、Maven の依存関係の転送により、スターターが依存する依存関係がプロジェクトに追加されます。スターターは、プロジェクトの依存関係のインポート仲介者にすぎません。

Maven の依存関係の転送に関する関連情報を参照できます。簡単な説明は次のとおりです:

プロジェクト A は B に依存し、B は C に依存します。プロジェクト A は、B に依存していることを宣言するだけで済みますが、C に依存していることを宣言する必要はありません。Maven はこの依存関係の配信を自動的に管理します。

2. 自動構成: AutoConfiguration

Spring Boot は、特定の条件に従ってデフォルト値を使用して関連コンポーネントまたはフレームワークを自動的に構成し、プロジェクトの構成ファイルを大幅に削減します。コード構成に基づいた独自の処理フローを追加しました。次のコンテンツでは、まず Spring のコードベースの構成を簡単に紹介し、次に Spring Boot の機能を紹介します。

(1) Spring コードベースの構成

Spring3 より前の Spring コンテキストの使用方法は、一般的に次のとおりでした。

Spring 構成ファイル

<!-- 数据源 -->
 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
 <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
 <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
 <property name="username" value="hr" />
 <property name="password" value="hr" /></bean>
 <!--组件扫描-->
 <context:component-scan base-package="com.demo.spring.sample.step03.?rvic?" />
ログイン後にコピー

ビジネスコード

package com.demo.spring.sample.step03.service.impl;.......@Service("userService")
public class UserService implements IUserService {   
   @Autowired
   private IUserDAO userDAO = null;
}
ログイン後にコピー
ログイン後にコピー

Spring コンテキストの作成

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
ログイン後にコピー

概要:

コンポーネントスキャンを通じて @Component、@Repository、@Service、@ のクラスパスをスキャンするように Spring に指示します。 Controller でアノテーションが付けられたクラスの場合、Spring はこれらのクラスをインスタンス化し、そのインスタンスを Spring コンテキストに登録します。ただし、データ ソースやプロパティ ファイルなどのサードパーティ Bean は依然として XML ファイルを使用して構成されます。XML 構成ファイルを完全に削除したい場合は、はい、もしやらなければならないとしたら、それは比較的面倒です。

XML 構成ファイルの使用には利点と欠点があります。欠点の 1 つは、Bean のインスタンス化プロセスをあまりカスタマイズできないことです。たとえば、上記の dataSource の場合、必要な場合にのみインスタンス化する必要があります。 Oracle の jdbc ドライバーをクラスパスに含める必要がありますが、これは実現できません。もう 1 つの欠点は、ロジックの一部が XML で構成されているため、コード ロジックが分散していることですが、利点は、構成が集中化されており、構成の切り替えが便利であることです。

Spring 3 以降では、次の方法で Spring コンテナを使用できます:

Spring 構成クラス

@Configuration // 表明当前类提供Spring配置文件的作用,Spring上下文会从当前类的注解中提取配置信息
@ComponentScan(basePackages = "com.demo.spring.sample.step08") 
// 开启组件扫描
public class AppConfig {
    @Bean // 表示这个方法实例化一个bean,id=dataSource
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUrl(url);
        dataSource.setUsername(userName);
        dataSource.setPassword(password);
        return dataSource;
    }}
ログイン後にコピー

ビジネス コード

package com.demo.spring.sample.step03.service.impl;.......@Service("userService")
public class UserService implements IUserService {   
   @Autowired
   private IUserDAO userDAO = null;
}
ログイン後にコピー
ログイン後にコピー

Spring コンテキストの作成

ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
ログイン後にコピー

概要:

XML ベースの構成は、Spring コンテキストの作成時に使用されなくなりました。構成ファイルは消え、AppConfig クラスに置き換えられました。このクラスには @Configuration のアノテーションを付ける必要があります。このクラスには @Bean アノテーション付きメソッドを含めることができ、コンテナはそのようなメソッドを自動的に呼び出して Bean をインスタンス化します。

(2) Spring Boot の自動構成

Spring Boot は、@Configuration アノテーションが付けられた多数のクラスの作成に役立ちました。各クラスは、DataSourceConfiguration などのコンポーネントまたはフレームワーク構成を提供します。静的内部クラス.java の Dbcp2。DBCP データ ソースの構成を提供します

//DBCP 数据源配置.
@Configuration //这个注解在实际代码中没有加,当前类被其它配置类Import
@ConditionalOnClass(org.apache.commons.dbcp2.BasicDataSource.class)
@ConditionalOnMissingBean(DataSource.class)
@ConditionalOnProperty(name = "spring.datasource.type",  matchIfMissing = true,havingValue = "org.apache.commons.dbcp2.BasicDataSource")
static class Dbcp2 {

   @Bean
   @ConfigurationProperties(prefix = "spring.datasource.dbcp2")
   public org.apache.commons.dbcp2.BasicDataSource dataSource(
         DataSourceProperties properties) {
      return createDataSource(properties,
            org.apache.commons.dbcp2.BasicDataSource.class);
   }

}
ログイン後にコピー

概要:

当Spring Boot启动的基本步骤走完后, 如果启用了自动配置,Spring Boot会加载下的<\META-INF\spring.factories>文件中的内容,该文件中定义了有关自动配置的信息,其中EnableAutoConfiguration对应的每一个类中都加入了注解@Configuration,也就是说这样的每一个类都相当于Spring的一个或多个配置文件,而其中加注解@Bean的方法是bean的工厂方法,会由Spring上下文自动调用,并且将返回的对象注册到上下文中。

spring.factories文件中自动配置类的部分内容

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
......
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
......
ログイン後にコピー

(三)、如何覆盖自动配置的属性

Spring Boot的自动配置会采用大量的默认值(约定由于配置),可以通过在类路径下提供application.properties或者application.yml配置文件来覆盖默认值,当然部分属性值必须通过该配置文件来提供,比如如果要使用Spring Boot对数据源的自动配置,则在配置文件中必须提供jdbc的url,否则会抛出异常。

三、集成内嵌容器 :main方法

Spring Boot支持的内嵌容器Tomcat、Jetty、Undertow本身就支持在Java中内嵌使用,因为这些容器本身就是使用Java编写的,只不过Spring Boot在main方法的调用链中根据自动配置嵌入了这样的容器。

不使用这样的内嵌容器也是可以的,在Maven中移除这样的依赖就可以,当然这个时候如果要通过Spring Boot使用Web相关框架,则需要打包为war包后独立部署,或者在开发过程中使用IDE环境的开发部署功能。

不使用内嵌容器的Web应用在打包时需要对工程进行一定的修改。

四、打包可运行文件 :maven-plugin

Maven使用的默认打包工具支持打包jar文件或者war文件,但是打包后的jar文件中不能再嵌入jar文件,而打包后的war文件不能直接运行,为了把工程所有文件打包为一个可直接运行的jar文件或war文件,spring提供了一个maven插件来解决这样的问题。当然这个插件还提诸如spring-boot:run这样的开发功能

五、热启动 :devtools

在开发过程中,当完成一个功能单元后,我们会启动程序查看运行效果,如果代码需要再次修改,则修改后需要关掉程序,然后重启程序,这个过程不断迭代,从而完成代码的编写、调试。

Spring Boot 热启动通过重写容器的类加载器,完成程序的部分重启,从而简化、加速程序的调试过程。spring-boot-devtools通过两个类加载器分别加载依赖库和项目代码,当spring-boot-devtools发现项目的编译输出路径下有变化时,通过其中的一个类加载器重新加载所有的项目自有代码,从而完成热启动。这样的热启动比冷启动(关闭、重启)要快很多,到底快多少取决于项目自有代码的数量。

和热启动对应的还有一个热替换,是指单独地替换被修改的某一个class到jvm中,甚至可以单独替换class的某个方法,这种方式比热启动要快,通常使用 JavaAgent 拦截默认加载器的行为来实现,spring有个独立的项目Spring Loaded就是这么做的,但是项目已经被移到了 attic 了,也就是被Spring束之高阁,所以不建议使用。

六、应用监控:actuator

如果类路径中有actuator这个组件的话,Spring Boot的自动配置会自动创建一些端点(端点:遵循Restful设计风格的资源,对应于Controller的某一个处理请求的方法),这些端点接受请求后返回有关应用的相关信息,比如:健康信息、线程信息等。返回的是json格式的数据,而使用 Spring Boot Admin 可以实现这些 JSON 数据的视图展现,当然也可以为其他应用监控系统监控当前系统提供服务。

七、问题:

为什么pom文件中要继承spring-boot-starter-parent?

spring-boot-starter-parent是spring-boot提供的一个pom,在该pom中定义了很多属性,比如:java源文件的字符编码,编译级别等,还有依赖管理、资源定义的相关pom配置,项目的pom如果继承starter-parent,可以减少相关配置

推荐教程: 《java教程

以上がスプリングブーツの原理は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Spring Boot + MyBatis + Atomikos + MySQL (ソースコード付き) Spring Boot + MyBatis + Atomikos + MySQL (ソースコード付き) Aug 15, 2023 pm 04:12 PM

実際のプロジェクトでは、分散トランザクションを避けるように努めます。ただし、場合によってはサービスを分割する必要があり、分散トランザクションの問題が発生することがあります。同時に、分散取引についても面接で質問されるので、このケースで練習し、面接で 123 について話すことができます。

Spring Boot を使用してブロックチェーン アプリケーションとスマート コントラクトを構築する方法 Spring Boot を使用してブロックチェーン アプリケーションとスマート コントラクトを構築する方法 Jun 22, 2023 am 09:33 AM

ビットコインなどのデジタル通貨の台頭により、ブロックチェーン技術が徐々に話題になっています。スマート コントラクトは、ブロックチェーン テクノロジーの重要な部分とみなすことができます。 SpringBoot は、人気のある Java バックエンド開発フレームワークとして、ブロックチェーン アプリケーションやスマート コントラクトの構築にも使用できます。この記事では、SpringBoot を使用してブロックチェーン テクノロジーに基づいたアプリケーションとスマート コントラクトを構築する方法を紹介します。 1. SpringBoot とブロックチェーン まず、ブロックチェーンに関連するいくつかの基本概念を理解する必要があります。ブロックチェーン

Spring Boot を通じて多言語サポートと国際アプリケーションを実現 Spring Boot を通じて多言語サポートと国際アプリケーションを実現 Jun 23, 2023 am 09:09 AM

グローバリゼーションの進展に伴い、多言語サポートや国際化機能を提供する必要のある Web サイトやアプリケーションがますます増えています。開発者にとって、これらの機能を実装することは、言語翻訳、日付、時刻、通貨の形式など、多くの側面を考慮する必要があるため、簡単な作業ではありません。ただし、SpringBoot フレームワークを使用すると、多言語サポートと国際アプリケーションを簡単に実装できます。まず、SpringBoot が提供する LocaleResolver インターフェースについて理解しましょう。ロック

Spring Boot を使用してビッグデータ処理アプリケーションを構築する方法 Spring Boot を使用してビッグデータ処理アプリケーションを構築する方法 Jun 23, 2023 am 09:07 AM

ビッグデータ時代の到来により、ますます多くの企業がビッグデータの価値を理解し、認識し、ビジネスに活用し始めています。それに伴う問題は、この大規模なデータ フローをどのように処理するかです。この場合、ビッグ データ処理アプリケーションは、すべての企業が検討しなければならないものになっています。開発者にとっては、SpringBoot を使用して効率的なビッグデータ処理アプリケーションを構築する方法も非常に重要な問題です。 SpringBoot は非常に人気のある Java フレームワークです。

Spring Boot と MyBatis Plus に基づいて ORM マッピングを実装する Spring Boot と MyBatis Plus に基づいて ORM マッピングを実装する Jun 22, 2023 pm 09:27 PM

Java Web アプリケーションの開発プロセスでは、ORM (Object-RelationalMapping) マッピング テクノロジを使用してデータベース内のリレーショナル データを Java オブジェクトにマッピングし、開発者がデータにアクセスして操作するのを容易にします。 SpringBoot は、最も人気のある Java Web 開発フレームワークの 1 つとして、MyBatis を統合する方法を提供しています。MyBatisPlus は、MyBatis に基づいて拡張された ORM フレームワークです。

Spring Boot と NoSQL データベースの統合と使用 Spring Boot と NoSQL データベースの統合と使用 Jun 22, 2023 pm 10:34 PM

インターネットの発展に伴い、ビッグデータ分析とリアルタイム情報処理が企業にとって重要なニーズとなっています。このようなニーズを満たすために、従来のリレーショナル データベースはビジネスやテクノロジー開発のニーズを満たせなくなりました。代わりに、NoSQL データベースを使用することが重要なオプションになっています。この記事では、最新のアプリケーションの開発と展開を可能にする、NoSQL データベースと統合された SpringBoot の使用について説明します。 NoSQL データベースとは何ですか? NoSQL は SQL だけではありません

Spring Boot に基づく分散データ キャッシュおよびストレージ システム Spring Boot に基づく分散データ キャッシュおよびストレージ システム Jun 22, 2023 am 09:48 AM

インターネットの継続的な発展と普及に伴い、データの処理と保存の需要も増加しており、データを効率的かつ確実に処理および保存する方法が業界や研究者の間で話題になっています。 SpringBoot をベースとした分散データ キャッシュおよびストレージ システムは、近年大きな注目を集めているソリューションです。分散データ キャッシュおよびストレージ システムとは何ですか?分散データ キャッシュおよびストレージ システムとは、複数のノード (サーバー) を介したデータの分散ストレージを指します。これにより、データのセキュリティと信頼性が向上し、データ処理も向上します。

Spring Boot と Apache ServiceMix を使用した ESB システムの構築 Spring Boot と Apache ServiceMix を使用した ESB システムの構築 Jun 22, 2023 pm 12:30 PM

現代のビジネスがさまざまな異種のアプリケーションやシステムにますます依存するようになるにつれて、企業の統合がさらに重要になります。 Enterprise Service Bus (ESB) は、さまざまなシステムとアプリケーションを接続して共通のデータ交換サービスとメッセージ ルーティング サービスを提供し、エンタープライズ レベルのアプリケーション統合を実現する統合アーキテクチャ モデルです。 SpringBootとApacheServiceMixを使えば簡単にESBシステムを構築できるので、その実装方法を紹介します。 SpringBoot と A

See all articles