AI辅助工具-通义灵码
目录
一、插件安装
方式一下载离线包
方式二 IDEA 安装插件
二、在项目中使用
1. 单元测试
2.协助编码
“通义灵码”是一款基于阿里云通义代码大模型打造的智能编码助手,它是阿里云出品的一款基于通义大模型的智能编码辅助工具,提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解释、研发智能问答、异常报错排查等能力,并针对阿里云 SDK/OpenAPI 的使用场景调优,助力开发者编码
官网: 通义灵码_你的智能编码助手-阿里云
一、插件安装
方式一下载离线包
下载安装-通义灵码
方式二 IDEA 安装插件
File ->setting 找到 GONGYI Lingma
二、在项目中使用
1. 单元测试
将鼠标方到方法名上就可以看到通义灵码提供的功能:注释代码、生成单元测试、生成注释、优化代码等功能,
个人觉得生成单元测试是最常用也提高工作效率的功能。毕竟手敲单元测试从编写用例到测试执行都会花费大量时间
2.协助编码
选择AI程序员让他帮忙完成一些工作中的编码。举个例子
需求:接口中的字段需要实现数据加密后再调用第三方处理
AI程序员吧对话:
对象属性上增加gwEncryptSwitch注解,EncryptSwitchUtils实现反射对象属性,如果属性有gwEncryptSwitch注解则对属性值加密
经过分析后通义灵码可以自动生成实现代码, 如下图
生成源码如下:
package com.boss.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface GwEncryptSwitch {
}
package com.boss.utils;
import com.boss.annotation.GwEncryptSwitch;
import java.lang.reflect.Field;
public class EncryptSwitchUtils {
public static void encryptFields(Object obj) throws IllegalAccessException {
if (obj == null) {
return;
}
Class<?> clazz = obj.getClass();
for (Field field : clazz.getDeclaredFields()) {
if (field.isAnnotationPresent(GwEncryptSwitch.class)) {
field.setAccessible(true);
Object value = field.get(obj);
if (value != null && value instanceof String) {
String encryptedValue = encrypt((String) value);
field.set(obj, encryptedValue);
}
}
}
}
private static String encrypt(String value) {
// 这里使用一个简单的加密方法作为示例,实际应用中请使用更安全的加密算法
StringBuilder encrypted = new StringBuilder();
for (char c : value.toCharArray()) {
encrypted.append((char) (c + 1));
}
return encrypted.toString();
}
public static void main(String[] args) {
try {
// 示例对象
ExampleClass example = new ExampleClass();
example.setSensitiveData("sensitiveValue");
System.out.println("Before encryption: " + example.getSensitiveData());
encryptFields(example);
System.out.println("After encryption: " + example.getSensitiveData());
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
class ExampleClass {
@GwEncryptSwitch
private String sensitiveData;
public String getSensitiveData() {
return sensitiveData;
}
public void setSensitiveData(String sensitiveData) {
this.sensitiveData = sensitiveData;
}
}
运行执行结果
Task :proxy:c-service:EncryptSwitchUtils.main()
Before encryption: sensitiveValue
After encryption: tfotjujwfWbmvf
从生成代码看,基本实现了要求,简单改动后就可以在项目中使用