java geliştirici kılavuzu Azure İşlevleri

Bu kılavuz, Java kullanarak Azure İşlevleri geliştirmeyi başarmanıza yardımcı olacak ayrıntılı bilgiler içerir.

Java geliştiricisi olarak Azure İşlevleri yeniyseniz önce aşağıdaki makalelerden birini okumayı göz önünde bulundurun:

Kullanmaya başlama Kavramlar Senaryolar/örnekler

Java işlevinin temelleri

Java işlevi, ek açıklamasıyla @FunctionNamedekore edilmiş bir public yöntemdir. Bu yöntem bir Java işlevinin girişini tanımlar ve belirli bir pakette benzersiz olmalıdır. paketi, ile @FunctionNameek açıklama ekli birden çok genel yönteme sahip birden çok sınıfa sahip olabilir. Azure'daki bir işlev uygulamasına tek bir paket dağıtılır. Azure'da işlev uygulaması, java işlevlerinizin dağıtım, yürütme ve yönetim bağlamını sağlar.

Programlama modeli

Tetikleyici ve bağlama kavramları Azure İşlevleri için temeldir. Tetikleyiciler kodunuzun yürütülmesini başlatır. Bağlamalar, özel veri erişim kodu yazmak zorunda kalmadan bir işleve veri geçirmenizi ve işlevden veri döndürmenizi sağlar.

Java işlevleri oluşturma

Java işlevleri oluşturmayı kolaylaştırmak için, belirli bir işlev tetikleyicisine sahip projeler oluşturmanıza yardımcı olmak için önceden tanımlanmış Java şablonlarını kullanan Maven tabanlı araçlar ve arketipler vardır.

Maven tabanlı araçlar

Aşağıdaki geliştirici ortamlarında Java işlev projeleri oluşturmanıza olanak tanıyan Azure İşlevleri araçları vardır:

Bu makaleler, tercih ettiğiniz IDE'yi kullanarak ilk işlevlerinizi nasıl oluşturabileceğinizi gösterir.

Proje iskelesi

Terminalden komut satırı geliştirmeyi tercih ediyorsanız, Java tabanlı işlev projelerini iskeleye eklemenin en basit yolu arketipleri kullanmaktır Apache Maven . Azure İşlevleri için Java Maven arketipi şu groupId:artifactId: com.microsoft.azure:azure-functions-archetype altında yayımlanır.

Aşağıdaki komut, bu arketipi kullanarak yeni bir Java işlev projesi oluşturur:

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

Bu arketipi kullanmaya başlamak için Bkz . Java hızlı başlangıcı.

Klasör yapısı

Azure İşlevleri Java projesinin klasör yapısı aşağıdadır:

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

İşlev uygulamasını yapılandırmak için paylaşılan bir host.json dosyası kullanabilirsiniz. Her işlevin kendi kod dosyası (.java) ve bağlama yapılandırma dosyası (function.json) vardır.

Bir projeye birden fazla işlev yerleştirebilirsiniz. İşlevlerinizi ayrı jarlara koymaktan kaçının. FunctionApp Hedef dizindeki, Azure'daki işlev uygulamanıza dağıtılan dizindir.

Tetikleyiciler ve ek açıklamalar

İşlevler HTTP isteği, zamanlayıcı veya veri güncelleştirmesi gibi bir tetikleyici tarafından çağrılır. İşlevinizin bir veya daha fazla çıkış üretmek için bu tetikleyiciyi ve diğer girişleri işlemesi gerekir.

Giriş ve çıkışları yöntemlerinize bağlamak için com.microsoft.azure.functions.annotation.* paketinde yer alan Java ek açıklamalarını kullanın. Daha fazla bilgi için bkz . Java başvuru belgeleri.

Önemli

Azure Blob depolama, Azure Kuyruk depolama veya Azure Tablo depolama tetikleyicilerini yerel olarak çalıştırmak için local.settings.json bir Azure Depolama hesabı yapılandırmanız gerekir.

Örnek:

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

azure-functions-maven-plugin tarafından oluşturulanlar function.json şunlardır:

{
  "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"
    }
  ]
}

Java sürümleri

Uygulamanızın Azure'da çalıştığı Java sürümü pom.xml dosyasında belirtilir. Maven arketipi şu anda Java 8 için yayımlamadan önce değiştirebileceğiniz bir pom.xml oluşturur. pom.xml'daki Java sürümü, uygulamanızı yerel olarak geliştirip test ettiğiniz sürümle eşleşmelidir.

Desteklenen sürümler

Aşağıdaki tabloda, işletim sistemine göre İşlevler çalışma zamanının her ana sürümü için desteklenen geçerli Java sürümleri gösterilmektedir:

İşlevler sürümü Java sürümleri (Windows) Java sürümleri (Linux)
4.x 17
11
8
21 (Önizleme)
17
11
8
3.x 11
8
11
8
2.x 8 yok

Dağıtımınız için bir Java sürümü belirtmediğiniz sürece Maven arketipi, Azure'a dağıtım sırasında varsayılan olarak Java 8 olarak belirlenir.

Dağıtım sürümünü belirtme

Maven arketipi tarafından hedeflenen Java sürümünü parametresini -DjavaVersion kullanarak denetleyebilirsiniz. Bu parametrenin değeri , 1117 veya 21olabilir8.

Maven arketipi, belirtilen Java sürümünü hedefleyen bir pom.xml oluşturur. pom.xml'daki aşağıdaki öğeler kullanılacak Java sürümünü gösterir:

Öğe Java 8 değeri Java 11 değeri Java 17 değeri Java 21 değeri (Önizleme, Linux) Açıklama
Java.version 1.8 11 17 21 Maven-compiler-plugin tarafından kullanılan Java sürümü.
JavaVersion 8 11 17 21 Azure'da işlev uygulaması tarafından barındırılan Java sürümü.

Aşağıdaki örnekler, pom.xml dosyasının ilgili bölümlerinde Java 8 ayarlarını gösterir:

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>

Önemli

maven kullanarak kod derleme sırasında kullanılan JDK dizinine doğru ayarlanmış JAVA_HOME ortam değişkenine sahip olmanız gerekir. JDK sürümünün en az ayar kadar Java.version yüksek olduğundan emin olun.

Dağıtım işletim sistemini belirtme

Maven, işlev uygulamanızın Azure'da çalıştığı işletim sistemini de belirtmenize olanak tanır. os öğesini kullanarak işletim sistemini seçin.

Öğe Windows Linux Docker
os windows linux docker

Aşağıdaki örnekte, pom.xml dosyasının runtime bölümündeki işletim sistemi ayarı gösterilmektedir:

<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>

JDK çalışma zamanı kullanılabilirliği ve desteği

OpenJDK'nin Microsoft ve Adoptium derlemeleri Java 8 (Adoptium), Java 11, 17 ve 21 (MSFT) için İşlevler'de sağlanır ve desteklenir. Bu ikili dosyalar, Azure için OpenJDK'nin maliyetsiz, çok platformlu, üretime hazır dağıtımı olarak sağlanır. Java SE uygulamalarını oluşturmak ve çalıştırmak için gereken tüm bileşenleri içerir.

Yerel geliştirme veya test için OpenJDK veya Adoptium Temurin ikili dosyalarının Microsoft derlemesini ücretsiz olarak indirebilirsiniz. JDK'ler ve işlev uygulamalarıyla ilgili sorunlar için Azure desteği uygun bir destek planıyla sağlanır.

İşlev uygulamanızda Azure için Zulu ikili dosyalarını kullanmaya devam etmek istiyorsanız uygulamanızı uygun şekilde yapılandırın. Siteniz için Azul ikili dosyalarını kullanmaya devam edebilirsiniz. Ancak tüm güvenlik düzeltme ekleri veya iyileştirmeler yalnızca OpenJDK'nin yeni sürümlerinde kullanılabilir. Bu nedenle, uygulamalarınızın java'nın en son kullanılabilir sürümünü kullanması için bu yapılandırmayı kaldırmanız gerekir.

JVM'i özelleştirme

İşlevler, Java işlevlerinizi çalıştırmak için kullanılan Java sanal makinesini (JVM) özelleştirmenize olanak tanır. Aşağıdaki JVM seçenekleri varsayılan olarak kullanılır:

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

Plan türüne bağlı olarak aşağıdaki uygulama ayarlarından birini kullanarak JVM'ye başka bağımsız değişkenler de sağlayabilirsiniz:

Plan türü Ayar adı Açıklama
Tüketim planı languageWorkers__java__arguments Bu ayar, Tüketim planında çalışan Java işlevlerinin soğuk başlangıç sürelerini artırır.
Premium plan
Ayrılmış plan
JAVA_OPTS

Aşağıdaki bölümlerde bu ayarların nasıl ekleneceği gösterilmektedir. Uygulama ayarlarıyla çalışma hakkında daha fazla bilgi edinmek için Uygulama ayarlarıyla çalışma bölümüne bakın.

Azure portal

Azure portalında, veya JAVA_OPTS ayarını eklemek languageWorkers__java__arguments için Uygulama Ayarlar sekmesini kullanın.

Azure CLI

Aşağıdaki seçenek örneğinde gösterildiği gibi, bu ayarları eklemek için -Djava.awt.headless=true az functionapp config appsettings set komutunu kullanabilirsiniz:

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

Bu örnek, başsız modu etkinleştirir. değerini işlev uygulamanızın adıyla ve <RESOURCE_GROUP> kaynak grubuyla değiştirin<APP_NAME>.

Üçüncü taraf kitaplıkları

Azure İşlevleri üçüncü taraf kitaplıklarının kullanımını destekler. Varsayılan olarak, proje pom.xml dosyanızda belirtilen tüm bağımlılıklar hedef sırasında mvn package otomatik olarak paketlenir. Dosyada pom.xml bağımlılık olarak belirtilmeyen kitaplıklar için, bunları işlevin kök dizinindeki bir lib dizine yerleştirin. Dizine lib yerleştirilen bağımlılıklar çalışma zamanında sistem sınıfı yükleyicisine eklenir.

com.microsoft.azure.functions:azure-functions-java-library Bağımlılık varsayılan olarak sınıf yolu üzerinde sağlanır ve dizine eklenmesi lib gerekmez. Ayrıca, azure-functions-java-worker burada listelenen bağımlılıkları classpath'e ekler.

Veri türü desteği

Giriş veya çıkış bağlamalarına bağlanmak için Düz eski Java nesnelerini (POJO'lar), içinde azure-functions-java-librarytanımlanan türleri veya Dize ve Tamsayı gibi temel veri türlerini kullanabilirsiniz.

POJO'lar

Giriş verilerini POJO'ya dönüştürmek için azure-functions-java-worker gson kitaplığını kullanır. İşlevlere giriş olarak kullanılan POJO türleri olmalıdır public.

İkili veri

function.json alanı binaryolarak ayarlayarak dataType ikili girişleri veya çıkışları byte[]öğesine bağlayın:

   @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");
    }

Null değerler bekliyorsanız kullanın Optional<T>.

Bağlamalar

Giriş ve çıkış bağlamaları, kodunuzun içinden verilere bağlanmak için bildirim temelli bir yol sağlar. bir işlevin birden çok giriş ve çıkış bağlaması olabilir.

Giriş bağlama örneği

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;
        }
    }
}

Bu işlevi bir HTTP isteğiyle çağırırsınız.

  • HTTP isteği yükü bağımsız değişkeni inputReqiçin olarak String geçirilir.
  • Tablo depolama alanından bir girdi alınır ve bağımsız değişkenine inputDataolarak TestInputData geçirilir.

Bir toplu giriş almak için , , POJO[]List<String>veya List<POJO>öğesine bağlayabilirsinizString[].

@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;
}

Yapılandırılan olay hub'ında yeni veriler olduğunda bu işlev tetiklenir. cardinality olarak ayarlandığındanMANY, işlev olay hub'ından bir toplu ileti alır. EventData olay hub'ından işlevin yürütülmesi için öğesine TestEventData dönüştürülür.

Çıkış bağlama örneği

kullanarak $returndönüş değerine bir çıkış bağlaması bağlayabilirsiniz.

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;
    }
}

Birden çok çıkış bağlaması varsa, yalnızca biri için dönüş değerini kullanın.

Birden çok çıkış değeri göndermek için pakette tanımlı seçeneğini azure-functions-java-library kullanınOutputBinding<T>.

@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;
    }

Bu işlevi bir HttpRequest nesnede çağırırsınız. Kuyruk depolama alanına birden çok değer yazar.

HttpRequestMessage ve HttpResponseMessage

Bunlar içinde azure-functions-java-librarytanımlanır. Bunlar, HttpTrigger işlevleriyle çalışmak için yardımcı türlerdir.

Özelleştirilmiş tür Hedef Tipik kullanım
HttpRequestMessage<T> HTTP Tetikleyicisi Yöntemi, üst bilgileri veya sorguları alır
HttpResponseMessage HTTP Çıkış Bağlaması 200 dışında bir durum döndürür

Meta veri

Az sayıda tetikleyici, giriş verileriyle birlikte tetikleyici meta verilerini gönderir. Meta verileri tetikleye bağlamak için ek açıklama @BindingName kullanabilirsiniz.

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);
    }
}

Yukarıdaki örnekte , queryValue HTTP isteği URL'sindeki http://{example.host}/api/metadata?name=testsorgu dizesi parametresine name bağlıdır. Kuyruk tetikleyicisi meta verilerinden bağlamayı Id gösteren başka bir örnek aşağıda verilmiştır.

 @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);
    }

Not

Ek açıklamada sağlanan adın meta veri özelliğiyle eşleşmesi gerekir.

Yürütme bağlamı

ExecutionContextiçinde tanımlanan azure-functions-java-library, işlev çalışma zamanıyla iletişim kurmak için yardımcı yöntemler içerir. Daha fazla bilgi için ExecutionContext başvuru makalesine bakın.

Günlükçü

getLoggerİşlev kodundan günlük yazmak için içinde ExecutionContexttanımlanan kullanın.

Örnek:


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);
    }
}

Günlükleri ve izlemeyi görüntüleme

Java stdout ve stderr günlüğünün ve diğer uygulama günlüklerinin akışını yapmak için Azure CLI'yi kullanabilirsiniz.

İşlev uygulamanızı Azure CLI kullanarak uygulama günlüğü yazacak şekilde yapılandırma burada açıklanmaktadır:

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

İşlev uygulamanızın günlük çıkışını Azure CLI kullanarak akışla kaydetmek için yeni bir komut istemi, Bash veya Terminal oturumu açın ve aşağıdaki komutu girin:

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

az webapp log tail komutu, seçeneğini kullanarak çıkışı filtreleme seçeneklerine --provider sahiptir.

Azure CLI kullanarak günlük dosyalarını tek bir ZIP dosyası olarak indirmek için yeni bir komut istemi olan Bash veya Terminal oturumu açın ve aşağıdaki komutu girin:

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

Bu komutu çalıştırmadan önce Azure portalında veya Azure CLI'da dosya sistemi günlüğünü etkinleştirmiş olmanız gerekir.

Ortam değişkenleri

İşlevler'de, hizmet bağlantı dizesi gibi uygulama ayarları yürütme sırasında ortam değişkenleri olarak sunulur. kullanarak bu ayarlara System.getenv("AzureWebJobsStorage")erişebilirsiniz.

Aşağıdaki örnek, anahtar adlı myAppSettinguygulama ayarını alır:


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);
    }
}

Java İşlevlerinde bağımlılık ekleme özelliğini kullanma

Azure İşlevleri Java, başarmak için kullanılan bir teknik olan bağımlılık ekleme (DI) yazılım tasarım desenini desteklerSınıflar ve bağımlılıkları arasında Denetimin Ters Çevrilmesi (IoC). Java Azure İşlevleri, İşlev Uygulamalarınızdaki popüler Bağımlılık Ekleme çerçeveleriyle tümleştirmeye yönelik bir kanca sağlar. Azure İşlevleri Java SPI, FunctionInstanceInjector arabirimini içerir. Bu arabirimi uygulayarak işlev sınıfınızın bir örneğini döndürebilirsiniz ve işlevleriniz bu örnekte çağrılır. Bu, Spring, Quarkus, Google Guice, Hançer gibi çerçevelere işlev örneği oluşturma ve IOC kapsayıcısına kaydetme olanağı sağlar. Bu, işlevlerinizi doğal olarak yönetmek için bu Bağımlılık Ekleme çerçevelerini kullanabileceğiniz anlamına gelir.

Not

Microsoft Azure İşlevleri Java SPI Türleri (azure-function-java-spi), üçüncü tarafların Microsoft Azure işlevleri çalışma zamanıyla etkileşim kurması için tüm SPI arabirimlerini içeren bir pakettir.

Bağımlılık ekleme için işlev örneği enjektör

azure-function-java-spi functionInstanceInjector arabirimi içeriyor

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; 

} 

Bağımlılık ekleme çerçeveleriyle tümleştirmek için FunctionInstanceInjector kullanan diğer örnekler için bu depoya bakın.

Sonraki adımlar

Java geliştirme Azure İşlevleri hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın: