我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Micronaut框架的简单使用介绍

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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:


> sdk install micronaut 1.0.0.RC2

这将安装我们构建、测试和部署Micronaut应用程序所需的所有二进制文件。它还提供Micronaut CLI工具,使我们能够轻松地启动新项目。

在下面的部分中,我们将介绍框架的一些特性。

依赖注入

如前所述,Micronaut在编译时处理依赖注入,这与大多数IoC容器不同。

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

为了将bean自动连接到我们的代码中,我们使用@Inject:


@Inject
private EmployeeService service;

@Inject注释的工作方式与@Autowired类似,可以用于字段、方法、构造函数和参数。

默认情况下,所有bean的作用域都是一个原型。我们可以使用@singleton快速创建单例bean。如果多个类实现相同的bean接口,@Primary可以用来消除它们之间的冲突:


@Primary
@Singleton
public class BlueCar implements Car {}

当bean是可选的时,可以使用@Requires注释,或者仅当满足某些条件时才执行自动连接。

在这方面,它的行为非常类似于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服务器

现在让我们看看如何创建一个简单的HTTP服务器应用程序。首先,我们将使用SDKMAN创建一个项目:


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

这将在名为helloworld server的目录中使用Maven创建一个新的Java项目。在这个目录中,我们将找到主要的应用程序源代码、Maven POM文件和项目的其他支持文件。

默认应用程序非常简单:


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

阻塞HTTP

就其本身而言,这个应用程序不会有太大的作用。让我们添加一个具有两个端点的控制器。两者都将返回问候语,但其中一个将使用GET HTTP动词,另一个将使用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实现这些端点。但是,我们可以通过将返回类型更改为任何反应性非阻塞类型来快速实现非阻塞端点。

例如,对于RxJava,我们可以使用Observable。同样,在使用Reactor时,我们可以返回Mono或Flux数据类型:


@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客户端

第一种也是最快的创建方法是使用声明性方法:


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

注意我们没有实现任何代码来调用我们的服务。相反,Micronaut理解如何从我们提供的方法签名和注释调用服务。

为了测试这个客户机,我们可以创建一个JUnit测试,它使用嵌入式服务器API来运行我们服务器的嵌入式实例:


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客户端

如果我们需要对其行为和实现进行更多的控制,我们还可以选择编写更传统的客户端:


@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参数指定特性,并提供以逗号分隔的特性名称列表。

我们可以通过运行以下命令找到可用功能的列表:


> 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命令时,将有一组新的命令可用:


> 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框架的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Micronaut框架的简单使用介绍

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

scrapy框架的简单介绍

这篇文章主要介绍“scrapy框架的简单介绍”,在日常操作中,相信很多人在scrapy框架的简单介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”scrapy框架的简单介绍”的疑惑有所帮助!接下来,请跟着小编
2023-06-02

Eclipse中的Jobs框架的简单介绍

这篇文章主要讲解了“Eclipse中的Jobs框架的简单介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Eclipse中的Jobs框架的简单介绍”吧!了解Eclipse多线程机制,需要先了
2023-06-17

Spring框架七大模块简单介绍

Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring框架的7个模块组成 Spring框架的每个
2023-05-30

NodeJs下的测试框架Mocha的简单介绍

介绍和代码下载 Mocha在2011年发布,是目前最为流行的javascript框架之一,在本文我们重点介绍它在NodeJs上的使用。 如果你需要下载实例代码,可以通过去官网查找。https://mochajs.org/ 下载代码后安装依赖
2022-06-04

SpringBoot单元测试框架Mockito介绍及使用

与集成测试将系统作为一个整体测试不同,单元测试更应该专注于某个类。所以当被测试类与外部类有依赖的时候,尤其是与数据库相关的这种费时且有状态的类,很难做单元测试。但好在可以通过“Mockito”这种仿真框架来模拟这些比较费时的类,从而专注于测试某个类内部的逻辑
2023-01-04

python使用sqlite简单介绍

python连接sqlite非常简单,基本步骤如下:用sqlite3.connect创建数据库连接,假设连接对象为conn如果该数据库操作不需要返回结果,就直接用conn.execute查询,如建表、删表、添加、修改删除数据等,需要conn
2023-01-31

Android Retrofit的简单介绍和使用

Retrofit与okhttp共同出自于Square公司,retrofit就是对okhttp做了一层封装。把网络请求都交给给了Okhttp,我们只需要通过简单的配置就能使用retrofit来进行网络请求了,其主要作者是Android大神Ja
2022-06-06

简单介绍如何使用GitHub

在现代互联网社会中,程序员们都离不开GitHub这个开源代码仓库。它不仅可以用于托管代码,还可以与其他合作者共同合作开发同一项目。但是,对于初次使用GitHub的人来说,可能会感到有些困惑。在本文中,我们将介绍如何使用GitHub。首先,需
2023-10-22

C# FileStream简单介绍和使用

FileStream 是 C# 中用于操作文件的类,它提供了一种以字节为单位读取和写入文件的功能。使用 FileStream,可以实现文件的读取、写入和修改等操作。使用 FileStream 进行文件操作的基本步骤如下:1. 创建 File
2023-08-08

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录