Przewodnik dla deweloperów języka Java usługi Azure Functions

Ten przewodnik zawiera szczegółowe informacje ułatwiające pomyślne opracowywanie usługi Azure Functions przy użyciu języka Java.

Jako deweloper języka Java, jeśli dopiero zaczynasz korzystać z usługi Azure Functions, rozważ najpierw przeczytanie jednego z następujących artykułów:

Wprowadzenie Pojęcia Scenariusze/przykłady

Podstawy funkcji Języka Java

Funkcja Języka Java jest public metodą ozdobioną adnotacją @FunctionName. Ta metoda definiuje wpis dla funkcji Języka Java i musi być unikatowy w określonym pakiecie. Pakiet może mieć wiele klas z wieloma metodami publicznymi z adnotacjami .@FunctionName Pojedynczy pakiet jest wdrażany w aplikacji funkcji na platformie Azure. Na platformie Azure aplikacja funkcji udostępnia kontekst wdrażania, wykonywania i zarządzania dla poszczególnych funkcji Java.

Model programowania

Pojęcia wyzwalaczy i powiązań są podstawowe dla usługi Azure Functions. Wyzwalacze rozpoczynają wykonywanie kodu. Powiązania umożliwiają przekazywanie danych do funkcji i zwracanie ich z funkcji bez konieczności pisania niestandardowego kodu dostępu do danych.

Tworzenie funkcji Języka Java

Aby ułatwić tworzenie funkcji Języka Java, istnieją narzędzia oparte na narzędziu Maven i archetypy, które używają wstępnie zdefiniowanych szablonów języka Java, aby ułatwić tworzenie projektów za pomocą określonego wyzwalacza funkcji.

Narzędzia oparte na narzędziu maven

Następujące środowiska deweloperskie zawierają narzędzia usługi Azure Functions, które umożliwiają tworzenie projektów funkcji Języka Java:

W tych artykułach pokazano, jak utworzyć swoje pierwsze funkcje przy użyciu wybranego środowiska IDE.

Tworzenie szkieletu projektu

Jeśli wolisz tworzenie wierszy polecenia z poziomu terminalu, najprostszym sposobem tworzenia szkieletu projektów funkcji opartych na języku Java jest użycie Apache Maven archetypów. Archetyp narzędzia Java Maven dla usługi Azure Functions jest publikowany w ramach następującej grupy GroupId:artifactId: com.microsoft.azure:azure-functions-archetype.

Następujące polecenie generuje nowy projekt funkcji Java przy użyciu tego archetypu:

mvn archetype:generate \
    -DarchetypeGroupId=com.microsoft.azure \
    -DarchetypeArtifactId=azure-functions-archetype

Aby rozpocząć korzystanie z tego archetypu , zobacz przewodnik Szybki start dla języka Java.

Struktura folderów

Oto struktura folderów projektu Java usługi Azure Functions:

FunctionsProject
 | - src
 | | - main
 | | | - java
 | | | | - FunctionApp
 | | | | | - MyFirstFunction.java
 | | | | | - MySecondFunction.java
 | - target
 | | - azure-functions
 | | | - FunctionApp
 | | | | - FunctionApp.jar
 | | | | - host.json
 | | | | - MyFirstFunction
 | | | | | - function.json
 | | | | - MySecondFunction
 | | | | | - function.json
 | | | | - bin
 | | | | - lib
 | - pom.xml

Aby skonfigurować aplikację funkcji, możesz użyć udostępnionego pliku host.json . Każda funkcja ma własny plik kodu (.java) i plik konfiguracji powiązania (function.json).

W projekcie można umieścić więcej niż jedną funkcję. Unikaj umieszczania funkcji w oddzielnych plikach jar. Element FunctionApp w katalogu docelowym jest wdrażany w aplikacji funkcji na platformie Azure.

Wyzwalacze i adnotacje

Funkcje są wywoływane przez wyzwalacz, taki jak żądanie HTTP, czasomierz lub aktualizacja danych. Funkcja musi przetworzyć ten wyzwalacz i inne dane wejściowe, aby wygenerować co najmniej jedno wyjście.

Użyj adnotacji Języka Java zawartych w pakiecie com.microsoft.azure.functions.annotation.* w celu powiązania danych wejściowych i wyjściowych z metodami. Aby uzyskać więcej informacji, zobacz dokumentację referencyjną języka Java.

Ważne

Musisz skonfigurować konto usługi Azure Storage w local.settings.json , aby uruchamiać wyzwalacze usługi Azure Blob Storage, Azure Queue Storage lub Azure Table Storage lokalnie.

Przykład:

public class Function {
    public String echo(@HttpTrigger(name = "req", 
      methods = {HttpMethod.POST},  authLevel = AuthorizationLevel.ANONYMOUS) 
        String req, ExecutionContext context) {
        return String.format(req);
    }
}

Oto wygenerowany element odpowiadający function.jsonwtyczki azure-functions-maven-plugin:

{
  "scriptFile": "azure-functions-example.jar",
  "entryPoint": "com.example.Function.echo",
  "bindings": [
    {
      "type": "httpTrigger",
      "name": "req",
      "direction": "in",
      "authLevel": "anonymous",
      "methods": [ "GET","POST" ]
    },
    {
      "type": "http",
      "name": "$return",
      "direction": "out"
    }
  ]
}

Wersje języka Java

Wersja języka Java, w której aplikacja działa na platformie Azure, jest określona w pliku pom.xml. Archetyp narzędzia Maven generuje obecnie pom.xml dla języka Java 8, który można zmienić przed opublikowaniem. Wersja języka Java w pom.xml powinna być zgodna z wersją, w której lokalnie utworzono i przetestowano aplikację.

Obsługiwane wersje

W poniższej tabeli przedstawiono bieżące obsługiwane wersje języka Java dla każdej wersji głównej środowiska uruchomieniowego usługi Functions według systemu operacyjnego:

Wersja usługi Functions Wersje języka Java (Windows) Wersje języka Java (Linux)
4.x 17
11
8
21 (wersja zapoznawcza)
17
11
8
3.x 11
8
11
8
2.x 8 nie dotyczy

Jeśli nie określisz wersji języka Java dla danego wdrożenia, archetyp narzędzia Maven domyślnie ma 8 podczas wdrażania na platformie Azure.

Określanie wersji wdrożenia

Możesz kontrolować wersję języka Java przeznaczoną dla archetypu narzędzia Maven przy użyciu parametru -DjavaVersion . Wartość tego parametru może mieć wartość 8, 11lub 1721.

Archetyp narzędzia Maven generuje pom.xml, który jest przeznaczony dla określonej wersji języka Java. Następujące elementy w pom.xml wskazują wersję języka Java do użycia:

Element Wartość języka Java 8 Wartość języka Java 11 Wartość języka Java 17 Wartość java 21 (wersja zapoznawcza, Linux) opis
Java.version 1.8 11 17 21 Wersja języka Java używana przez wtyczkę maven-compiler-plugin.
JavaVersion 8 11 17 21 Wersja języka Java hostowana przez aplikację funkcji na platformie Azure.

W poniższych przykładach przedstawiono ustawienia języka Java 8 w odpowiednich sekcjach pliku pom.xml:

Java.version

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
    <azure.functions.maven.plugin.version>1.6.0</azure.functions.maven.plugin.version>
    <azure.functions.java.library.version>1.3.1</azure.functions.java.library.version>
    <functionAppName>fabrikam-functions-20200718015742191</functionAppName>
    <stagingDirectory>${project.build.directory}/azure-functions/${functionAppName}</stagingDirectory>
</properties>

JavaVersion

<runtime>
    <!-- runtime os, could be windows, linux or docker-->
    <os>windows</os>
    <javaVersion>8</javaVersion>
    <!-- for docker function, please set the following parameters -->
    <!-- <image>[hub-user/]repo-name[:tag]</image> -->
    <!-- <serverId></serverId> -->
    <!-- <registryUrl></registryUrl>  -->
</runtime>

Ważne

Zmienna środowiskowa JAVA_HOME musi być poprawnie ustawiona na katalog JDK używany podczas kompilowania kodu przy użyciu narzędzia Maven. Upewnij się, że wersja zestawu JDK jest co najmniej tak wysoka, jak ustawienie Java.version .

Określanie systemu operacyjnego wdrożenia

Narzędzie Maven umożliwia również określenie systemu operacyjnego, na którym działa aplikacja funkcji na platformie Azure. os Użyj elementu , aby wybrać system operacyjny.

Element Windows Linux Docker
os windows linux docker

Poniższy przykład przedstawia ustawienie systemu operacyjnego w runtime sekcji pliku pom.xml:

<runtime>
    <!-- runtime os, could be windows, linux or docker-->
    <os>windows</os>
    <javaVersion>8</javaVersion>
    <!-- for docker function, please set the following parameters -->
    <!-- <image>[hub-user/]repo-name[:tag]</image> -->
    <!-- <serverId></serverId> -->
    <!-- <registryUrl></registryUrl>  -->
</runtime>

Dostępność i obsługa środowiska uruchomieniowego zestawu JDK

Wersje zestawu OpenJDK firmy Microsoft i adoptium są udostępniane i obsługiwane w usługach Functions dla języka Java 8 (Adoptium), Java 11, 17 i 21 (MSFT). Te pliki binarne są udostępniane jako bezpłatna, wieloplatformowa, gotowa do produkcji dystrybucja zestawu OpenJDK dla platformy Azure. Zawierają one wszystkie składniki do kompilowania i uruchamiania aplikacji Java SE.

W przypadku lokalnego programowania lub testowania możesz bezpłatnie pobrać kompilację microsoft openJDK lub plików binarnych Adoptium Temurin . pomoc techniczna platformy Azure w przypadku problemów z zestawami JDK i aplikacjami funkcji jest dostępny z kwalifikowanym planem pomocy technicznej.

Jeśli chcesz nadal używać aplikacji Zulu dla plików binarnych platformy Azure w aplikacji funkcji, skonfiguruj odpowiednio aplikację. Możesz nadal używać plików binarnych Azul dla swojej witryny. Jednak wszelkie poprawki lub ulepszenia zabezpieczeń są dostępne tylko w nowych wersjach zestawu OpenJDK. W związku z tym należy ostatecznie usunąć tę konfigurację, aby aplikacje korzystały z najnowszej dostępnej wersji języka Java.

Dostosowywanie maszyny wirtualnej JVM

Usługa Functions umożliwia dostosowanie maszyny wirtualnej Java (JVM) używanej do uruchamiania funkcji Języka Java. Domyślnie są używane następujące opcje JVM:

  • -XX:+TieredCompilation
  • -XX:TieredStopAtLevel=1
  • -noverify
  • -Djava.net.preferIPv4Stack=true
  • -jar

Inne argumenty dla maszyny JVM można podać przy użyciu jednego z następujących ustawień aplikacji, w zależności od typu planu:

Typ planu Nazwa ustawienia Komentarz
Plan zużycia languageWorkers__java__arguments To ustawienie zwiększa zimny czas uruchamiania funkcji Języka Java uruchomionych w planie Zużycie.
Plan Premium
Dedykowany plan
JAVA_OPTS

W poniższych sekcjach pokazano, jak dodać te ustawienia. Aby dowiedzieć się więcej na temat pracy z ustawieniami aplikacji, zobacz sekcję Praca z ustawieniami aplikacji.

Azure Portal

W witrynie Azure Portal użyj karty Aplikacja Ustawienia, aby dodać languageWorkers__java__arguments ustawienie lub JAVA_OPTS .

Interfejs wiersza polecenia platformy Azure

Możesz użyć polecenia az functionapp config appsettings set , aby dodać te ustawienia, jak pokazano w poniższym przykładzie -Djava.awt.headless=true dla opcji:

az functionapp config appsettings set \
    --settings "languageWorkers__java__arguments=-Djava.awt.headless=true" \
    --name <APP_NAME> --resource-group <RESOURCE_GROUP>

W tym przykładzie włączono tryb bezgłowy. Zastąp <APP_NAME> ciąg nazwą aplikacji funkcji i <RESOURCE_GROUP> grupą zasobów.

Biblioteki innych firm

Usługa Azure Functions obsługuje korzystanie z bibliotek innych firm. Domyślnie wszystkie zależności określone w pliku projektu pom.xml są automatycznie dołączane podczas mvn package celu. W przypadku bibliotek, które nie są określone jako zależności w pom.xml pliku, umieść je w lib katalogu głównym funkcji. Zależności umieszczone w katalogu są dodawane do modułu lib ładującego klasy systemowej w czasie wykonywania.

Zależność com.microsoft.azure.functions:azure-functions-java-library jest domyślnie udostępniana na ścieżce klasy i nie musi być uwzględniona w lib katalogu. Ponadto usługa azure-functions-java-worker dodaje zależności wymienione tutaj do ścieżki klasy.

Obsługa typów danych

Można użyć zwykłych starych obiektów Java (POJO), typów zdefiniowanych w azure-functions-java-library, lub typów danych pierwotnych, takich jak Ciąg i Liczba całkowita, aby powiązać z powiązaniami wejściowymi lub wyjściowymi.

Obiekty POJO

W przypadku konwertowania danych wejściowych na poJO usługa azure-functions-java-worker używa biblioteki gson . Typy POJO używane jako dane wejściowe do funkcji powinny mieć wartość public.

Dane binarne

Powiąż dane wejściowe lub wyjściowe binarne z byte[]dataType elementem , ustawiając pole w function.json na binarywartość :

   @FunctionName("BlobTrigger")
    @StorageAccount("AzureWebJobsStorage")
     public void blobTrigger(
        @BlobTrigger(name = "content", path = "myblob/{fileName}", dataType = "binary") byte[] content,
        @BindingName("fileName") String fileName,
        final ExecutionContext context
    ) {
        context.getLogger().info("Java Blob trigger function processed a blob.\n Name: " + fileName + "\n Size: " + content.length + " Bytes");
    }

Jeśli oczekujesz wartości null, użyj polecenia Optional<T>.

Powiązania

Powiązania wejściowe i wyjściowe zapewniają deklaratywny sposób nawiązywania połączenia z danymi z poziomu kodu. Funkcja może mieć wiele powiązań wejściowych i wyjściowych.

Przykład powiązania wejściowego

package com.example;

import com.microsoft.azure.functions.annotation.*;

public class Function {
    @FunctionName("echo")
    public static String echo(
        @HttpTrigger(name = "req", methods = { HttpMethod.PUT }, authLevel = AuthorizationLevel.ANONYMOUS, route = "items/{id}") String inputReq,
        @TableInput(name = "item", tableName = "items", partitionKey = "Example", rowKey = "{id}", connection = "AzureWebJobsStorage") TestInputData inputData,
        @TableOutput(name = "myOutputTable", tableName = "Person", connection = "AzureWebJobsStorage") OutputBinding<Person> testOutputData
    ) {
        testOutputData.setValue(new Person(httpbody + "Partition", httpbody + "Row", httpbody + "Name"));
        return "Hello, " + inputReq + " and " + inputData.getKey() + ".";
    }

    public static class TestInputData {
        public String getKey() { return this.rowKey; }
        private String rowKey;
    }
    public static class Person {
        public String partitionKey;
        public String rowKey;
        public String name;

        public Person(String p, String r, String n) {
            this.partitionKey = p;
            this.rowKey = r;
            this.name = n;
        }
    }
}

Ta funkcja jest wywoływana z żądaniem HTTP.

  • Ładunek żądania HTTP jest przekazywany jako element String argumentu inputReq.
  • Jeden wpis jest pobierany z usługi Table Storage i jest przekazywany jako TestInputData argument inputData.

Aby otrzymać partię danych wejściowych, można powiązać z String[]elementami , POJO[], List<String>lub List<POJO>.

@FunctionName("ProcessIotMessages")
    public void processIotMessages(
        @EventHubTrigger(name = "message", eventHubName = "%AzureWebJobsEventHubPath%", connection = "AzureWebJobsEventHubSender", cardinality = Cardinality.MANY) List<TestEventData> messages,
        final ExecutionContext context)
    {
        context.getLogger().info("Java Event Hub trigger received messages. Batch size: " + messages.size());
    }
    
    public class TestEventData {
    public String id;
}

Ta funkcja jest wyzwalana za każdym razem, gdy w skonfigurowanym centrum zdarzeń znajdują się nowe dane. cardinality Ponieważ parametr jest ustawiony na MANYwartość , funkcja odbiera partię komunikatów z centrum zdarzeń. EventData z centrum zdarzeń jest konwertowany na TestEventData w celu wykonania funkcji.

Przykład powiązania wyjściowego

Powiązanie danych wyjściowych z wartością zwracaną można powiązać przy użyciu polecenia $return.

package com.example;

import com.microsoft.azure.functions.annotation.*;

public class Function {
    @FunctionName("copy")
    @StorageAccount("AzureWebJobsStorage")
    @BlobOutput(name = "$return", path = "samples-output-java/{name}")
    public static String copy(@BlobTrigger(name = "blob", path = "samples-input-java/{name}") String content) {
        return content;
    }
}

Jeśli istnieje wiele powiązań wyjściowych, użyj wartości zwracanej tylko dla jednego z nich.

Aby wysłać wiele wartości wyjściowych, użyj OutputBinding<T> wartości zdefiniowanych w pakiecie azure-functions-java-library .

@FunctionName("QueueOutputPOJOList")
    public HttpResponseMessage QueueOutputPOJOList(@HttpTrigger(name = "req", methods = { HttpMethod.GET,
            HttpMethod.POST }, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request,
            @QueueOutput(name = "itemsOut", queueName = "test-output-java-pojo", connection = "AzureWebJobsStorage") OutputBinding<List<TestData>> itemsOut, 
            final ExecutionContext context) {
        context.getLogger().info("Java HTTP trigger processed a request.");
       
        String query = request.getQueryParameters().get("queueMessageId");
        String queueMessageId = request.getBody().orElse(query);
        itemsOut.setValue(new ArrayList<TestData>());
        if (queueMessageId != null) {
            TestData testData1 = new TestData();
            testData1.id = "msg1"+queueMessageId;
            TestData testData2 = new TestData();
            testData2.id = "msg2"+queueMessageId;

            itemsOut.getValue().add(testData1);
            itemsOut.getValue().add(testData2);

            return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + queueMessageId).build();
        } else {
            return request.createResponseBuilder(HttpStatus.INTERNAL_SERVER_ERROR)
                    .body("Did not find expected items in CosmosDB input list").build();
        }
    }

     public static class TestData {
        public String id;
    }

Ta funkcja jest wywoływana HttpRequest na obiekcie. Zapisuje wiele wartości w usłudze Queue Storage.

HttpRequestMessage i HttpResponseMessage

Są one zdefiniowane w pliku azure-functions-java-library. Są one typami pomocnika do pracy z funkcjami HttpTrigger.

Wyspecjalizowany typ Obiekt docelowy Typowe użycie
HttpRequestMessage<T> Wyzwalacz HTTP Pobiera metodę, nagłówki lub zapytania
HttpResponseMessage Powiązanie danych wyjściowych HTTP Zwraca stan inny niż 200

Metadane

Kilka wyzwalaczy wysyła metadane wyzwalacza wraz z danymi wejściowymi. Możesz użyć adnotacji @BindingName , aby powiązać z metadanymi wyzwalacza.

package com.example;

import java.util.Optional;
import com.microsoft.azure.functions.annotation.*;


public class Function {
    @FunctionName("metadata")
    public static String metadata(
        @HttpTrigger(name = "req", methods = { HttpMethod.GET, HttpMethod.POST }, authLevel = AuthorizationLevel.ANONYMOUS) Optional<String> body,
        @BindingName("name") String queryValue
    ) {
        return body.orElse(queryValue);
    }
}

W poprzednim przykładzie parametr queryValue jest powiązany z parametrem name ciągu zapytania w adresie URL żądania HTTP. http://{example.host}/api/metadata?name=test Oto kolejny przykład przedstawiający sposób powiązania z Id metadanymi wyzwalacza kolejki.

 @FunctionName("QueueTriggerMetadata")
    public void QueueTriggerMetadata(
        @QueueTrigger(name = "message", queueName = "test-input-java-metadata", connection = "AzureWebJobsStorage") String message,@BindingName("Id") String metadataId,
        @QueueOutput(name = "output", queueName = "test-output-java-metadata", connection = "AzureWebJobsStorage") OutputBinding<TestData> output,
        final ExecutionContext context
    ) {
        context.getLogger().info("Java Queue trigger function processed a message: " + message + " with metadaId:" + metadataId );
        TestData testData = new TestData();
        testData.id = metadataId;
        output.setValue(testData);
    }

Uwaga

Nazwa podana w adnotacji musi być zgodna z właściwością metadanych.

Kontekst wykonywania

ExecutionContext, zdefiniowany w pliku azure-functions-java-library, zawiera metody pomocnicze do komunikowania się ze środowiskiem uruchomieniowym funkcji. Aby uzyskać więcej informacji, zobacz artykuł executionContext reference (Dokumentacja wykonaniacontextu).

Rejestratora

Użyj polecenia getLogger, zdefiniowanego w pliku ExecutionContext, aby napisać dzienniki z kodu funkcji.

Przykład:


import com.microsoft.azure.functions.*;
import com.microsoft.azure.functions.annotation.*;

public class Function {
    public String echo(@HttpTrigger(name = "req", methods = {HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) String req, ExecutionContext context) {
        if (req.isEmpty()) {
            context.getLogger().warning("Empty request body received by function " + context.getFunctionName() + " with invocation " + context.getInvocationId());
        }
        return String.format(req);
    }
}

Wyświetlanie dzienników i śladów

Interfejs wiersza polecenia platformy Azure umożliwia przesyłanie strumieniowe dzienników stdout i stderr języka Java oraz innych rejestrowania aplikacji.

Oto jak skonfigurować aplikację funkcji do zapisywania rejestrowania aplikacji przy użyciu interfejsu wiersza polecenia platformy Azure:

az webapp log config --name functionname --resource-group myResourceGroup --application-logging true

Aby przesłać strumieniowo dane wyjściowe rejestrowania dla aplikacji funkcji przy użyciu interfejsu wiersza polecenia platformy Azure, otwórz nowy wiersz polecenia, powłokę Bash lub sesję terminalu i wprowadź następujące polecenie:

az webapp log tail --name webappname --resource-group myResourceGroup

Polecenie az webapp log tail ma opcje filtrowania danych wyjściowych przy użyciu --provider opcji .

Aby pobrać pliki dziennika jako pojedynczy plik ZIP przy użyciu interfejsu wiersza polecenia platformy Azure, otwórz nowy wiersz polecenia, powłokę Bash lub sesję terminalu i wprowadź następujące polecenie:

az webapp log download --resource-group resourcegroupname --name functionappname

Przed uruchomieniem tego polecenia należy włączyć rejestrowanie systemu plików w witrynie Azure Portal lub interfejsie wiersza polecenia platformy Azure.

Zmienne środowiskowe

W usłudze Functions ustawienia aplikacji, takie jak parametry połączenia usługi, są widoczne jako zmienne środowiskowe podczas wykonywania. Dostęp do tych ustawień można uzyskać za pomocą polecenia System.getenv("AzureWebJobsStorage").

Poniższy przykład pobiera ustawienie aplikacji z kluczem o nazwie myAppSetting:


public class Function {
    public String echo(@HttpTrigger(name = "req", methods = {HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) String req, ExecutionContext context) {
        context.getLogger().info("My app setting value: "+ System.getenv("myAppSetting"));
        return String.format(req);
    }
}

Używanie wstrzykiwania zależności w usłudze Java Functions

Język Java usługi Azure Functions obsługuje wzorzec projektowania oprogramowania iniekcji zależności (DI), który jest techniką umożliwiającą osiągnięcie inwersji kontroli (IoC) między klasami i ich zależnościami. Usługa Azure Functions w języku Java umożliwia integrację z popularnymi strukturami wstrzykiwania zależności w aplikacjach usługi Functions. Azure Functions Java SPI zawiera interfejs FunctionInstanceInjector. Implementując ten interfejs, można zwrócić wystąpienie klasy funkcji, a funkcje będą wywoływane w tym wystąpieniu. Zapewnia to platformy takie jak Spring, Quarkus, Google Guice, Dagger itp. możliwość tworzenia wystąpienia funkcji i rejestrowania go w kontenerze IOC. Oznacza to, że możesz użyć tych struktur iniekcji zależności do zarządzania funkcjami naturalnie.

Uwaga

Microsoft Azure Functions Java SPI Types (azure-function-java-spi) to pakiet zawierający wszystkie interfejsy SPI dla innych firm do interakcji ze środowiskiem uruchomieniowym usługi Microsoft Azure Functions.

Iniekcja wystąpienia funkcji do wstrzykiwania zależności

azure-function-java-spi zawiera interfejs FunctionInstanceInjector

package com.microsoft.azure.functions.spi.inject; 

/** 

 * The instance factory used by DI framework to initialize function instance. 

 * 

 * @since 1.0.0 

 */ 

public interface FunctionInstanceInjector { 

    /** 

     * This method is used by DI framework to initialize the function instance. This method takes in the customer class and returns 

     * an instance create by the DI framework, later customer functions will be invoked on this instance. 

     * @param functionClass the class that contains customer functions 

     * @param <T> customer functions class type 

     * @return the instance that will be invoked on by azure functions java worker 

     * @throws Exception any exception that is thrown by the DI framework during instance creation 

     */ 

    <T> T getInstance(Class<T> functionClass) throws Exception; 

} 

Aby uzyskać więcej przykładów, które używają klasy FunctionInstanceInjector do integracji z strukturami wstrzykiwania zależności, zapoznaj się z tym repozytorium.

Następne kroki

Aby uzyskać więcej informacji na temat programowania w języku Java usługi Azure Functions, zobacz następujące zasoby: