Azure Functions Java 개발자 가이드

이 가이드에는 Java를 사용하여 Azure Functions를 성공적으로 개발하는 데 도움이 되는 자세한 정보가 포함되어 있습니다.

Java 개발자로서 Azure Functions를 처음 사용하는 경우 먼저 다음 문서 중 하나를 읽어보세요.

시작하기 개념 시나리오/샘플

Java 함수 기본 사항

Java 함수는 주석 @FunctionName으로 데코레이트된 public 메서드입니다. 이 메서드는 Java 함수의 항목을 정의하며 특정 패키지에서 고유해야 합니다. 패키지에는 @FunctionName로 주석이 추가된 여러 공용 메소드가 있는 여러 클래스가 있을 수 있습니다. 단일 패키지는 Azure의 함수 앱에 배포됩니다. Azure에서 함수 앱은 개별 Java 함수에 대한 배포, 실행 및 관리 컨텍스트를 제공합니다.

프로그래밍 모델

트리거 및 바인딩의 개념은 Azure Functions의 기본입니다. 트리거는 코드 실행을 시작합니다. 바인딩을 사용하면 사용자 지정 데이터 액세스 코드를 작성하지 않고도 데이터를 함수에 전달하고 함수에서 데이터를 반환할 수 있습니다.

Java 함수 만들기

Java 함수를 보다 쉽게 만들 수 있도록 특정 함수 트리거를 사용하여 프로젝트를 만드는 데 도움이 되는 미리 정의된 Java 템플릿을 사용하는 Maven 기반 도구와 아키타입이 있습니다.

Maven 기반 도구

다음 개발자 환경에는 Java 함수 프로젝트를 만들도록 하는 Azure Functions 도구가 있습니다.

이러한 문서는 선택한 IDE를 사용하여 첫 번째 함수를 만드는 방법을 보여 줍니다.

프로젝트 스캐폴딩

터미널에서 명령줄 개발을 선호하는 경우 Java 기반 함수 프로젝트를 스캐폴드하는 가장 간단한 방법은 Apache Maven 아키타입을 사용하는 것입니다. Azure Functions의 Java Maven 아키타입은 다음 groupId:artifactId로 게시됩니다. com.microsoft.azure:azure-functions-archetype.

다음 명령은 이 아키타입을 사용하여 새 Java 함수 프로젝트를 생성합니다.

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

이 아키타입 사용을 시작하려면 Java 빠른 시작을 참조하세요.

폴더 구조

Azure Functions Java 프로젝트의 폴더 구조는 다음과 같습니다.

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

공유 host.json 파일을 사용하여 함수 앱을 구성할 수 있습니다. 각 함수에는 자체 코드 파일(.java)과 바인딩 구성 파일(function.json)이 있습니다.

하나의 프로젝트에 둘 이상의 함수를 넣을 수 있습니다. 함수를 별도의 jar에 넣지 않도록 하세요. 대상 디렉터리의 FunctionApp이 Azure의 함수 앱에 배포됩니다.

트리거 및 주석

함수는 HTTP 요청, 타이머 또는 데이터 업데이트와 같은 트리거에 의해 호출됩니다. 함수는 해당 트리거 및 모든 다른 입력을 처리하고 하나 이상의 출력을 생성해야 합니다.

com.microsoft.azure.functions.annotation.* 패키지에 포함된 Java 주석을 사용하여 입력 및 출력을 메서드에 바인딩합니다. 자세한 내용은 Java 참조 문서를 참조하세요.

Important

Azure Blob Storage, Azure Queue Storage 또는 Azure Table 스토리지 트리거를 로컬로 실행하려면 local.settings.json에서 Azure Storage 계정을 구성해야 합니다.

예시:

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

다음은 azure-function-maven-plugin에서 생성된 해당 function.json입니다.

{
  "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 버전

Azure에서 앱이 실행되는 Java 버전은 pom.xml 파일에 지정됩니다. Maven 아키타입은 현재 Java 8용 pom.xml 생성하며, 게시하기 전에 변경할 수 있습니다. pom.xml Java 버전은 앱을 로컬로 개발하고 테스트한 버전과 일치해야 합니다.

지원되는 버전

다음 표는 운영 체제별로 Functions 런타임의 각 주요 버전에 대해 현재 지원되는 Java 버전을 보여 줍니다.

Functions 버전 Java 버전(Windows) Java 버전(Linux)
4.x 17
11
8
21(미리 보기)
17
11
8
3.x 11
8
11
8
2.x 8 해당 없음

배포에 대해 Java 버전을 지정하지 않는한 Maven 아키타입은 Azure에 배포하는 동안 기본적으로 Java 8로 설정됩니다.

배포 버전 지정

-DjavaVersion 매개 변수를 사용하여 Maven 아키 타입이 대상으로하는 Java 버전을 제어할 수 있습니다. 이 매개 변수의 값은 8, 11, 17 또는 21일 수 있습니다.

Maven 아키타입은 지정된 Java 버전을 대상으로하는 pom.xml 생성합니다. pom.xml 다음 요소는 사용할 Java 버전을 나타냅니다.

요소 Java 8 가치 Java 11 가치 Java 17 가치 Java 21 값(미리 보기, Linux) 설명
Java.version 1.8 11 17 21 maven-compiler-plugin에서 사용하는 Java 버전입니다.
JavaVersion 8 11 17 21 Azure의 함수 앱에서 호스트하는 Java 버전입니다.

다음 예제에서는 pom.xml 파일의 관련 섹션에서 Java 8에 대한 설정을 보여 줍니다.

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>

Important

Maven를 사용하여 코드를 컴파일하는 동안 사용되는 JDK 디렉터리로 JAVA_HOME 환경 변수를 올바르게 설정해야 합니다. JDK 버전이 최소한 Java.version 설정 이상인지 확인합니다.

배포 OS 지정

또한 Maven를 사용하면 함수 앱이 Azure에서 실행되는 운영 체제를 지정할 수 있습니다. os 요소를 사용하여 운영 체제를 선택합니다.

요소 Windows Linux Docker
os windows linux docker

다음 예제는 pom.xml 파일의 runtime 섹션에있는 운영 체제 설정을 보여 줍니다.

<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 런타임 사용 가능성 및 지원

OpenJDK의 Microsoft 및 Adoptium 빌드는 Java 8(Adoptium), Java 11, 17 및 21(MSFT)용 Functions에서 제공되고 지원됩니다. 이러한 이진 파일은 Azure용 OpenJDK의 비용 없는 다중 플랫폼 프로덕션 준비 배포로 제공됩니다. 여기에는 Java SE 애플리케이션을 빌드하고 실행하기 위한 모든 구성 요소가 포함됩니다.

로컬 개발 또는 테스트를 위해 OpenJDK의 Microsoft Build 또는 Adoptium Temurin 이진 파일을 무료로 다운로드할 수 있습니다. JDK 및 함수 앱에 문제가 있는 경우 정규화된 지원 플랜을 통해 Azure 지원을 사용할 수 있습니다.

함수 앱에서 Zulu for Azure 이진 파일을 계속 사용하려면 앱을 적절하게 구성하세요. 사이트에 Azul 이진 파일을 계속 사용할 수 있습니다. 그러나 보안 패치 또는 개선 사항은 새 버전의 OpenJDK에서만 사용할 수 있습니다. 이때문에 앱에서 사용 가능한 최신 버전의 Java를 사용할 수 있도록 이 구성을 제거해야 합니다.

JVM 사용자 지정

함수를 사용하여 Java 함수를 실행하는 데 사용되는 JVM(Java Virtual Machine)을 사용자 지정할 수 있습니다. 다음 JVM 옵션은 기본적으로 사용됩니다.

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

플랜 유형에 따라 다음 애플리케이션 설정 중 하나를 사용하여 JVM에 다른 인수를 제공할 수 있습니다.

플랜 유형 설정 이름 Comment(설명)
사용 계획 languageWorkers__java__arguments 이 설정을 사용하면 소비 플랜에서 실행되는 Java 함수의 콜드 시작 시간이 늘어납니다.
프리미엄 계획
전용 계획
JAVA_OPTS

다음 섹션에서는 이러한 설정을 추가하는 방법을 보여 줍니다. 애플리케이션 설정 작업에 대한 자세한 내용은 애플리케이션 설정 작업 섹션을 참조하세요.

Azure Portal

Azure Portal에서 애플리케이션 설정 탭을 사용하여 languageWorkers__java__arguments 또는 JAVA_OPTS 설정을 추가합니다.

Azure CLI

-Djava.awt.headless=true 옵션에 대한 다음 예제와 같이 az functionapp config appsettings set 명령을 사용하여 이러한 설정을 추가할 수 있습니다.

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

이 예제에서는 헤드리스 모드를 사용합니다. 또한 <APP_NAME>을 함수 앱의 이름으로 바꾸고 <RESOURCE_GROUP>을 리소스 그룹으로 바꿉니다.

제3자 라이브러리

Azure Functions는 타사 라이브러리의 사용을 지원합니다. 기본적으로 pom.xml 프로젝트 파일에 지정된 모든 종속성은 mvn package 목표 중에 자동으로 번들로 묶입니다. pom.xml 파일에 종속성으로 지정되지 않은 라이브러리의 경우 함수의 루트 디렉터리에 있는 lib 디렉터리에 배치합니다. lib 디렉터리에 배치된 종속성은 런타임에 시스템 클래스 로더에 추가됩니다.

com.microsoft.azure.functions:azure-functions-java-library 종속성은 클래스 경로에서 기본적으로 제공되므로 lib 디렉터리에 포함하지 않아도 됩니다. 또한 azure-functions-java-worker여기 나열된 종속성을 클래스 경로에 추가합니다.

데이터 형식 지원

POJO(이전의 일반 Java 개체), azure-functions-java-library에 정의된 형식 또는 문자열 및 정수와 같은 기본 데이터 형식을 사용하여 입력 또는 출력 바인딩에 바인딩할 수 있습니다.

POJO

입력 데이터를 POJO로 변환하기 위해 azure-functions-java-workergson 라이브러리를 사용합니다. 함수에 대한 입력으로 사용되는 POJO 형식은 public이어야 합니다.

이진 데이터

function.json의 dataType 필드를 binary로 설정하여 이진 입력 또는 출력을 byte[]에 바인딩합니다.

   @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 값이 필요한 경우 Optional<T>를 사용합니다.

바인딩

입력 및 출력 바인딩은 코드 내에서 데이터에 연결하는 선언적 방법을 제공합니다. 함수에는 여러 개의 입력 및 출력 바인딩이 있을 수 있습니다.

입력 바인딩 예제

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

HTTP 요청을 사용하여 이 함수를 호출합니다.

  • HTTP 요청 페이로드는 String으로 inputReq 인수에 전달됩니다.
  • 하나의 항목이 Table Storage에서 검색되고 TestInputDatainputData 인수에 전달됩니다.

입력 일괄 처리를 받기 위해 String[], POJO[], List<String> 또는 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;
}

이 함수는 구성된 이벤트 허브에 새 데이터가 있을 때마다 트리거됩니다. cardinalityMANY로 설정되므로 함수는 이벤트 허브로부터 메시지의 일괄 처리를 받습니다. 이벤트 허브의 EventData는 함수 실행을 위해 TestEventData로 변환됩니다.

출력 바인딩 예제

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

여러 개의 출력 바인딩이 있으면 둘 중 하나에 대한 반환 값을 사용합니다.

여러 출력 값을 보내려면 azure-functions-java-library 패키지에 정의된 OutputBinding<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;
    }

HttpRequest 개체에서 이 함수를 호출합니다. Queue Storage에 여러 값을 기록합니다.

HttpRequestMessage 및 HttpResponseMessage

이 항목은 azure-functions-java-library에서 정의됩니다. HttpTrigger 함수를 사용하는 도우미 형식입니다.

특수 형식 대상 일반적인 용도
HttpRequestMessage<T> HTTP 트리거 메서드, 헤더 또는 쿼리 가져오기
HttpResponseMessage HTTP 출력 바인딩 200 이외의 상태 반환

메타데이터

입력 데이터와 함께 트리거 메타데이터를 보내는 트리거는 거의 없습니다. @BindingName 주석을 사용하여 트리거 메타데이터에 바인딩할 수 있습니다.

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

앞의 예제에서 queryValue는 HTTP 요청 URL http://{example.host}/api/metadata?name=test에서 name 쿼리 문자열 매개 변수에 바인딩됩니다. 큐 트리거 메타데이터에서 Id에 바인딩하는 방법을 보여 주는 다른 예제는 다음과 같습니다.

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

참고 항목

주석에 제공된 이름은 메타데이터 속성과 일치해야 합니다.

실행 컨텍스트

azure-functions-java-library에 정의된 ExecutionContext에는 함수 런타임과 통신하는 도우미 메서드가 포함되어 있습니다. 자세한 내용은 ExecutionContext 참조 문서를 참조하세요.

로거

ExecutionContext에 정의된 getLogger를 사용하여 함수 코드의 로그를 기록합니다.

예시:


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

로그 보기 및 추적

Azure CLI를 사용하여 Java stdout 및 stderr 로깅과 다른 애플리케이션 로깅도 스트림할 수 있습니다.

Azure CLI를 사용하여 애플리케이션 로깅을 기록하는 함수 앱을 구성하는 방법은 다음과 같습니다.

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

Azure CLI를 사용하여 함수 앱의 로깅 출력을 스트림하려면 새 명령 프롬프트, Bash 또는 터미널 세션을 열고 다음 명령을 입력합니다.

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

az webapp log tail 명령에는 --provider 옵션을 사용하여 출력을 필터링하는 옵션이 있습니다.

Azure CLI를 사용하여 로그 파일을 단일 ZIP 파일로 다운로드하려면 새 명령 프롬프트, Bash 또는 터미널 세션을 열고 다음 명령을 입력합니다.

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

이 명령을 실행하기 전에 Azure Portal 또는 Azure CLI에 로그인하는 파일 시스템이 사용하도록 설정되어 있어야 합니다.

환경 변수

Functions에서 앱 설정(예: 서비스 연결 문자열)은 실행 중에 환경 변수로 노출됩니다. System.getenv("AzureWebJobsStorage")를 사용하여 해당 설정에 액세스할 수 있습니다.

다음 예제에서는 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);
    }
}

Java Functions에서 종속성 주입 사용

Azure Functions Java는 클래스와 해당 종속성 간에 IoC(제어 반전)를 구현하는 기법인 DI(종속성 주입) 소프트웨어 디자인 패턴을 지원합니다. Java Azure Functions는 Functions 앱에서 인기 있는 종속성 주입 프레임워크와 통합할 수 있는 후크를 제공합니다. Azure Functions Java SPI에는 FunctionInstanceInjector 인터페이스가 포함되어 있습니다. 이 인터페이스를 구현하면 함수 클래스의 인스턴스를 반환할 수 있으며 이 인스턴스에서 함수가 호출됩니다. 이를 통해 Spring, Quarkus, Google Guice, Dagger 등의 프레임워크에서 함수 인스턴스를 만들고 IOC 컨테이너에 등록할 수 있습니다. 즉, 이러한 종속성 주입 프레임워크를 사용하여 함수를 자연스럽게 관리할 수 있습니다.

참고 항목

Microsoft Azure Functions Java SPI 형식(azure-function-java-spi)은 타사에서 Microsoft Azure Functions 런타임과 상호 작용할 수 있는 모든 SPI 인터페이스를 포함하는 패키지입니다.

종속성 주입을 위한 함수 인스턴스 인젝터

azure-function-java-spi에는 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; 

} 

FunctionInstanceInjector를 사용하여 종속성 주입 프레임워크와 통합하는 더 많은 예제는 리포지토리를 참조하세요.

다음 단계

Azure Functions Java 개발에 관한 자세한 내용은 다음 리소스를 참조하세요.