SpringBoot集成JNA调用动态库

目录

1.JNA概述

2. 创建SpringBoot基础工程

2.1 创建Maven工程  

2.2 配置Maven地址

2.3 设置自动导入包

2.4 设置启动注解

2.5 引入依赖

2.6 编写启动类

3. 引入JNA依赖

4. 动态库存放路径

5. JNA接口代码

6. 测试控制类


1.JNA概述

        JNA(Java Native Access)是一个开源的Java框架,是Sun公司推出的一种调用本地方法的技术,是建立在经典的JNI基础之上的一个框架。之所以说它是JNI的替代者,是因为JNA大大简化了调用本地方法的过程,使用很方便,基本上不需要脱离Java环境就可以完成。

        JNA是建立在JNI技术基础之上的一个Java类库,它使您可以方便地使用java直接访问动态链接库中的函数。

        原来使用JNI,你必须手工用C写一个动态链接库,在C语言中映射Java的数据类型。

        JNA中,它提供了一个动态的C语言编写的转发器,可以自动实现Java和C的数据类型映射,你不再需要编写C动态链接库。

        也许这也意味着,使用JNA技术比使用JNI技术调用动态链接库会有些微的性能损失。但总体影响不大,因为JNA也避免了JNI的一些平台配置的开销。

2. 创建SpringBoot基础工程

2.1 创建Maven工程  

2.2 配置Maven地址

2.3 设置自动导入包

2.4 设置启动注解

2.5 引入依赖

<!--引入springboot依赖-->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.4.RELEASE</version>
</parent>

<dependencies>
    <!--引入spring-boot启动器依赖, 添加启动器后web工程常用的依赖会自动帮你引入-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

2.6 编写启动类

package com.miaxis;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[]   args  ) {
        SpringApplication.run(Application.class,  args  );
    }
}

3. 引入JNA依赖

<!--jna-->
<dependency>
    <groupId>net.java.dev.jna</groupId>
    <artifactId>jna</artifactId>
    <version>5.8.0</version>
</dependency>

4. 动态库存放路径

  • 项目中放在resource目录下

  • 或者放在resources\win32-x86-64目录下

5. JNA接口代码

package com.miaxis.jna;

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;

public interface MXFingerAlgAPI extends Library {
    MXFingerAlgAPI myinstance = (MXFingerAlgAPI) Native.loadLibrary(
            Platform.isWindows() ? "MXFingerAlg" : "MXFingerAlg_linux64.so", MXFingerAlgAPI.class);

    /**
     * @function Get the version of the algorithm
     * @param    strVersion - [out], version(100bytes)
     * @return   0-success, other-failed (see ErrorCode.h)
     */
    public int zzGetVersion(byte[] szVersion);
}

6. 测试控制类

package com.miaxis.controller;

import com.miaxis.jna.MXFingerAlgAPI;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Api(tags = "测试组") 
public class HelloController {

    @GetMapping("algversion")
    public String algversion() {
        byte[] bAlgVersion = new byte[100];
        MXFingerAlgAPI.myinstance.zzGetVersion(bAlgVersion);
        System.out.println("finger_alg_version: " + new String(bAlgVersion));
        return new String(bAlgVersion);
    }

}

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值