激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Micronaut框架的簡單使用介紹

Micronaut框架的簡單使用介紹

2021-09-13 15:27老K的java博客 Java教程

這篇文章主要介紹了Micronaut框架的簡單使用介紹,幫助大家更好的理解和學習使用Micronaut,感興趣的朋友可以了解下

什么是Micronaut

Micronaut是一個基于JVM的框架,用于構建輕量級、模塊化的應用程序。Micronaut是由創建Grails的同一家公司OCI開發的最新框架,旨在使創建微服務變得快速和簡單。

雖然Micronaut包含一些類似于Spring等現有框架的特性,但它也有一些新特性使它與眾不同。通過對Java、Groovy和Kotlin的支持,它提供了多種創建應用程序的方法。

主要特點

Micronaut最令人興奮的特性之一是它的編譯時依賴注入機制。大多數框架使用反射和代理在運行時執行依賴注入。然而,Micronaut在編譯時構建其依賴注入數據。結果是更快的應用程序啟動和更小的內存占用。

另一個特性是它對客戶端和服務器的反應式編程的一流支持。由于RxJava和projectreactor都受支持,所以特定的反應式實現的選擇權留給了開發人員。

Micronaut還具有一些特性,使其成為開發云本地應用程序的優秀框架。它支持多種服務發現工具,如Eureka和consur,還可以與不同的分布式跟蹤系統(如Zipkin和Jaeger)一起使用。

它還提供了對創建AWS lambda函數的支持,使得創建Serverless無服務器應用程序變得容易。

入門

最簡單的入門方法是使用SDKMAN:

?
1
> sdk install micronaut 1.0.0.RC2

這將安裝我們構建、測試和部署Micronaut應用程序所需的所有二進制文件。它還提供Micronaut CLI工具,使我們能夠輕松地啟動新項目。

在下面的部分中,我們將介紹框架的一些特性。

依賴注入

如前所述,Micronaut在編譯時處理依賴注入,這與大多數IoC容器不同。

但是,它仍然完全支持JSR-330注釋,因此使用bean與其他IoC框架類似。

為了將bean自動連接到我們的代碼中,我們使用@Inject:

?
1
2
@Inject
private EmployeeService service;

@Inject注釋的工作方式與@Autowired類似,可以用于字段、方法、構造函數和參數。

默認情況下,所有bean的作用域都是一個原型。我們可以使用@singleton快速創建單例bean。如果多個類實現相同的bean接口,@Primary可以用來消除它們之間的沖突:

?
1
2
3
@Primary
@Singleton
public class BlueCar implements Car {}

當bean是可選的時,可以使用@Requires注釋,或者僅當滿足某些條件時才執行自動連接。

在這方面,它的行為非常類似于Spring Boot@Conditional注解:

?
1
2
3
4
5
6
@Singleton
@Requires(beans = DataSource.class)
@Requires(property = "enabled")
@Requires(missingBeans = EmployeeService)
@Requires(sdk = Sdk.JAVA, value = "1.8")
public class JdbcEmployeeService implements EmployeeService {}

構建HTTP服務器

現在讓我們看看如何創建一個簡單的HTTP服務器應用程序。首先,我們將使用SDKMAN創建一個項目:

?
1
> mn create-app hello-world-server -build maven

這將在名為helloworld server的目錄中使用Maven創建一個新的Java項目。在這個目錄中,我們將找到主要的應用程序源代碼、Maven POM文件和項目的其他支持文件。

默認應用程序非常簡單:

?
1
2
3
4
5
public class ServerApplication {
    public static void main(String[] args) {
        Micronaut.run(ServerApplication.class);
    }
}

阻塞HTTP

就其本身而言,這個應用程序不會有太大的作用。讓我們添加一個具有兩個端點的控制器。兩者都將返回問候語,但其中一個將使用GET HTTP動詞,另一個將使用POST:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Controller("/greet")
public class GreetController {
 
    @Inject
    private GreetingService greetingService;
 
    @Get("/{name}")
    public String greet(String name) {
        return greetingService.getGreeting() + name;
    }
 
    @Post(value = "/{name}", consumes = MediaType.TEXT_PLAIN)
    public String setGreeting(@Body String name) {
        return greetingService.getGreeting() + name;
    }
}

反應式IO

默認情況下,Micronaut將使用傳統的阻塞I/O實現這些端點。但是,我們可以通過將返回類型更改為任何反應性非阻塞類型來快速實現非阻塞端點。

例如,對于RxJava,我們可以使用Observable。同樣,在使用Reactor時,我們可以返回Mono或Flux數據類型:

?
1
2
3
4
@Get("/{name}")
public Mono<String> greet(String name) {
    return Mono.just(greetingService.getGreeting() + name);
}

對于阻塞和非阻塞端點,Netty都是用于處理HTTP請求的底層服務器。

通常,請求在啟動時創建的主I/O線程池中處理,使它們阻塞。

但是,當從控制器端點返回非阻塞數據類型時,Micronaut使用Netty事件循環線程,使整個請求成為非阻塞的。

構建HTTP客戶端

現在讓我們構建一個客戶機來使用剛剛創建的端點。Micronaut提供兩種創建HTTP客戶端的方法:

  • 聲明性HTTP客戶端
  • 可編程的HTTP客戶機

聲明性HTTP客戶端

第一種也是最快的創建方法是使用聲明性方法:

?
1
2
3
4
5
@Client("/greet")
public interface GreetingClient {
    @Get("/{name}")
    String greet(String name);
}

注意我們沒有實現任何代碼來調用我們的服務。相反,Micronaut理解如何從我們提供的方法簽名和注釋調用服務。

為了測試這個客戶機,我們可以創建一個JUnit測試,它使用嵌入式服務器API來運行我們服務器的嵌入式實例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class GreetingClientTest {
    private EmbeddedServer server;
    private GreetingClient client;
 
    @Before
    public void setup() {
        server = ApplicationContext.run(EmbeddedServer.class);
        client = server.getApplicationContext().getBean(GreetingClient.class);
    }
 
    @After
    public void cleanup() {
        server.stop();
    }
 
    @Test
    public void testGreeting() {
        assertEquals(client.greet("Mike"), "Hello Mike");
    }
}

編程HTTP客戶端

如果我們需要對其行為和實現進行更多的控制,我們還可以選擇編寫更傳統的客戶端:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Singleton
public class ConcreteGreetingClient {
   private RxHttpClient httpClient;
 
   public ConcreteGreetingClient(@Client("/") RxHttpClient httpClient) {
      this.httpClient = httpClient;
   }
 
   public String greet(String name) {
      HttpRequest<String> req = HttpRequest.GET("/greet/" + name);
      return httpClient.retrieve(req).blockingFirst();
   }
 
   public Single<String> greetAsync(String name) {
      HttpRequest<String> req = HttpRequest.GET("/async/greet/" + name);
      return httpClient.retrieve(req).first("An error as occurred");
   }
}

默認的HTTP客戶機使用RxJava,因此可以輕松地處理阻塞或非阻塞調用。

Micronaut客戶端

當我們使用Micronaut CLI工具創建示例項目時,我們已經看到了它的實際應用。

在我們的例子中,我們創建了一個獨立的應用程序,但它還有其他一些功能。

聯合項目

在Micronaut中,聯合只是一組位于同一目錄下的獨立應用程序。通過使用聯邦,我們可以輕松地將它們管理在一起,并確保它們獲得相同的默認值和設置。

當我們使用CLI工具生成聯合體時,它采用與create app命令相同的參數。它將創建一個頂級的項目結構,每個獨立的應用程序將在其子目錄中創建。

特征

創建獨立應用程序或聯合時,我們可以決定應用程序需要哪些功能。這有助于確保項目中包含最小的依賴項集。

我們使用-features參數指定特性,并提供以逗號分隔的特性名稱列表。

我們可以通過運行以下命令找到可用功能的列表:

?
1
2
3
4
5
6
7
8
9
10
> mn profile-info service
 
Provided Features:
--------------------
* annotation-api - Adds Java annotation API
* config-consul - Adds support for Distributed Configuration with Consul
* discovery-consul - Adds support for Service Discovery with Consul
* discovery-eureka - Adds support for Service Discovery with Eureka
* groovy - Creates a Groovy application
[...] More features available

現有項目

我們還可以使用CLI工具來修改現有的項目。使我們能夠創建bean、客戶機、控制器等等。當我們在現有項目中運行mn命令時,將有一組新的命令可用:

?
1
2
3
4
5
6
7
> mn help
| Command Name         Command Description
-----------------------------------------------
create-bean            Creates a singleton bean
create-client          Creates a client interface
create-controller      Creates a controller and associated test
create-job             Creates a job with scheduled method

小結

在對Micronaut的簡要介紹中,我們看到了構建阻塞和非阻塞HTTP服務器和客戶端是多么容易。此外,我們還探討了它的CLI的一些特性。

但這只是它提供的功能的一小部分。它還完全支持serverless功能、服務發現、分布式跟蹤、監視和度量、分布式配置等等。

盡管它的許多特性都是從Grails和Spring等現有框架中派生出來的,但它也有許多獨特的特性幫助它脫穎而出。

一如既往,我們可以在GitHub repo中找到上面的示例代碼:https://github.com/eugenp/tutorials/tree/master/micronaut

以上就是Micronaut框架的簡單使用介紹的詳細內容,更多關于Micronaut框架的資料請關注服務器之家其它相關文章!

原文鏈接:https://javakk.com/1840.html

延伸 · 閱讀

精彩推薦
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7472021-02-04
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
主站蜘蛛池模板: 国产一国产一级毛片视频在线 | 九艹在线 | 久久国产精品二国产精品 | 日韩欧美高清一区 | 性猛aa久久久 | 国产资源在线观看视频 | 日韩在线视频在线观看 | 国产一区二区三区精品在线观看 | 羞羞视频免费网站男男 | 国外成人在线视频网站 | 国产毛片aaa一区二区三区视频 | 成年片在线观看 | 99久久精约久久久久久清纯 | 一区二区三区在线播放视频 | 国产一及毛片 | 国产一区二区视频精品 | 色视频在线播放 | 视频毛片 | 毛片一区二区三区四区 | 草久免费 | 国产一区二区不卡视频 | av免费在线播放网址 | 极品国产91在线网站 | 护士hd欧美free性xxxx | 久久草在线视频 | 久久亚洲线观看视频 | 国产免费观看一区二区三区 | 欧美a区| 羞羞视频.www在线观看 | 国产亚洲欧美在线视频 | 国产91久久久久 | 欧美精品videos| 久久久久久久午夜 | 精品一区二区在线观看视频 | 成人一级免费视频 | 鲁一鲁一鲁一鲁一曰综合网 | 国产无区一区二区三麻豆 | 国产一区网址 | 国产欧美日韩在线不卡第一页 | 黄色免费电影网址 | 亚洲最新黄色网址 |