国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

Micronaut框架的簡(jiǎn)單使用介紹

發(fā)布時(shí)間:2021-07-17 21:51 來(lái)源:腳本之家 閱讀:0 作者:老K的java博客 欄目: 編程語(yǔ)言 歡迎投稿:712375056

目錄

    什么是Micronaut

    Micronaut是一個(gè)基于JVM的框架,用于構建輕量級、模塊化的應用程序。Micronaut是由創(chuàng )建Grails的同一家公司OCI開(kāi)發(fā)的最新框架,旨在使創(chuàng )建微服務(wù)變得快速和簡(jiǎn)單。

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

    主要特點(diǎn)

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

    另一個(gè)特性是它對客戶(hù)端和服務(wù)器的反應式編程的一流支持。由于RxJava和projectreactor都受支持,所以特定的反應式實(shí)現的選擇權留給了開(kāi)發(fā)人員。

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

    它還提供了對創(chuàng )建AWS lambda函數的支持,使得創(chuàng )建Serverless無(wú)服務(wù)器應用程序變得容易。

    入門(mén)

    最簡(jiǎn)單的入門(mén)方法是使用SDKMAN:

    > sdk install micronaut 1.0.0.RC2

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

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

    依賴(lài)注入

    如前所述,Micronaut在編譯時(shí)處理依賴(lài)注入,這與大多數IoC容器不同。

    但是,它仍然完全支持JSR-330注釋?zhuān)虼耸褂胋ean與其他IoC框架類(lèi)似。

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

    @Inject
    private EmployeeService service;

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

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

    @Primary
    @Singleton
    public class BlueCar implements Car {}

    當bean是可選的時(shí),可以使用@Requires注釋?zhuān)蛘邇H當滿(mǎn)足某些條件時(shí)才執行自動(dòng)連接。

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

    @Singleton
    @Requires(beans = DataSource.class)
    @Requires(property = "enabled")
    @Requires(missingBeans = EmployeeService)
    @Requires(sdk = Sdk.JAVA, value = "1.8")
    public class JdbcEmployeeService implements EmployeeService {}

    構建HTTP服務(wù)器

    現在讓我們看看如何創(chuàng )建一個(gè)簡(jiǎn)單的HTTP服務(wù)器應用程序。首先,我們將使用SDKMAN創(chuàng )建一個(gè)項目:

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

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

    默認應用程序非常簡(jiǎn)單:

    public class ServerApplication {
        public static void main(String[] args) {
            Micronaut.run(ServerApplication.class);
        }
    }

    阻塞HTTP

    就其本身而言,這個(gè)應用程序不會(huì )有太大的作用。讓我們添加一個(gè)具有兩個(gè)端點(diǎn)的控制器。兩者都將返回問(wèn)候語(yǔ),但其中一個(gè)將使用GET HTTP動(dòng)詞,另一個(gè)將使用POST:

    @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實(shí)現這些端點(diǎn)。但是,我們可以通過(guò)將返回類(lèi)型更改為任何反應性非阻塞類(lèi)型來(lái)快速實(shí)現非阻塞端點(diǎn)。

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

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

    對于阻塞和非阻塞端點(diǎn),Netty都是用于處理HTTP請求的底層服務(wù)器。

    通常,請求在啟動(dòng)時(shí)創(chuàng )建的主I/O線(xiàn)程池中處理,使它們阻塞。

    但是,當從控制器端點(diǎn)返回非阻塞數據類(lèi)型時(shí),Micronaut使用Netty事件循環(huán)線(xiàn)程,使整個(gè)請求成為非阻塞的。

    構建HTTP客戶(hù)端

    現在讓我們構建一個(gè)客戶(hù)機來(lái)使用剛剛創(chuàng )建的端點(diǎn)。Micronaut提供兩種創(chuàng )建HTTP客戶(hù)端的方法:

    • 聲明性HTTP客戶(hù)端
    • 可編程的HTTP客戶(hù)機

    聲明性HTTP客戶(hù)端

    第一種也是最快的創(chuàng )建方法是使用聲明性方法:

    @Client("/greet")
    public interface GreetingClient {
        @Get("/{name}")
        String greet(String name);
    }

    注意我們沒(méi)有實(shí)現任何代碼來(lái)調用我們的服務(wù)。相反,Micronaut理解如何從我們提供的方法簽名和注釋調用服務(wù)。

    為了測試這個(gè)客戶(hù)機,我們可以創(chuàng )建一個(gè)JUnit測試,它使用嵌入式服務(wù)器API來(lái)運行我們服務(wù)器的嵌入式實(shí)例:

    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客戶(hù)端

    如果我們需要對其行為和實(shí)現進(jìn)行更多的控制,我們還可以選擇編寫(xiě)更傳統的客戶(hù)端:

    @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客戶(hù)機使用RxJava,因此可以輕松地處理阻塞或非阻塞調用。

    Micronaut客戶(hù)端

    當我們使用Micronaut CLI工具創(chuàng )建示例項目時(shí),我們已經(jīng)看到了它的實(shí)際應用。

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

    聯(lián)合項目

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

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

    特征

    創(chuàng )建獨立應用程序或聯(lián)合時(shí),我們可以決定應用程序需要哪些功能。這有助于確保項目中包含最小的依賴(lài)項集。

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

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

    > 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工具來(lái)修改現有的項目。使我們能夠創(chuàng )建bean、客戶(hù)機、控制器等等。當我們在現有項目中運行mn命令時(shí),將有一組新的命令可用:

    > 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的簡(jiǎn)要介紹中,我們看到了構建阻塞和非阻塞HTTP服務(wù)器和客戶(hù)端是多么容易。此外,我們還探討了它的CLI的一些特性。

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

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

    一如既往,我們可以在GitHub repo中找到上面的示例代碼:

    以上就是Micronaut框架的簡(jiǎn)單使用介紹的詳細內容,更多關(guān)于Micronaut框架的資料請關(guān)注腳本之家其它相關(guān)文章!

    免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

    熟妇人妻中文AV无码| 亚洲AV无码国产精品麻豆天美| А√在线中文网新版地址在线| 岛国AV动作片在线观看| 免费a级毛片无码专区 | 无码成人AAAAA毛片|