SpringBoot集成JNA调用动态库
创作时间:
作者:
@小白创作中心
SpringBoot集成JNA调用动态库
引用
CSDN
1.
https://blog.csdn.net/mickey2007/article/details/136812362
本文将介绍如何在SpringBoot项目中集成JNA(Java Native Access)来调用动态库。通过本文,你将学习到JNA的基本概念、SpringBoot工程的创建步骤、JNA依赖的引入方法以及具体的代码实现。
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 引入依赖
<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依赖
<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);
}
}
热门推荐
镜面反射与漫反射:光学实验教学的绝佳案例
胖了200公斤!三个月前它还是头受伤的小象
秋冬打卡:芜湖古城&陶辛水韵
周末带娃打卡:芜湖方特&湿地公园
探访安徽首个省级历史文化街区:花街-萧家巷
裸车价和落地价是如何计算的?
肿瘤患者如何在工作中应对腹水?
肿瘤患者的腹水救星:高蛋白饮食
车辆使用成本分析
如何预防头痛的发生
偏头痛好困扰!从中医看偏头痛与舒缓
一侧耳朵疼并伴有头疼
新圩村端午节:包粽子比赛里的文化传承
哈尔滨亚冬会开幕式遭遇寒潮!零星小雪来袭,气温低至零下15℃
冬运会期间必打卡:哈尔滨圣索菲亚大教堂全攻略
年入50万,买宝马X5值不值?
苏州机场何时来?
“没有机场”的苏州正着力拓展机场服务
健康睡眠,人人共享
冬季滋补首选:科学搭配燕窝提升免疫力
燕窝红枣神仙组合,你get了吗?
冬季养生新宠:红枣枸杞燕窝
双十一囤货必看:燕窝选购与炖煮完全攻略
哈尔滨亚冬会开幕:冰壶混双中国香港战韩国,短道速滑女队全员晋级
怎么说分手不伤害对方
人参果的功效和作用及营养价值
人参果,“长寿果”?
《风云变》来袭,重温步惊云经典塑造
哈尔滨亚冬会:中国健儿冲击首金!
2025哈尔滨亚冬会观赛攻略:冰雪世界的狂欢