https://www.cnblogs.com/liuyj-top/p/12976396.html
https://www.cnblogs.com/l-y-h/p/12859477.html
将一个支持序列的 Function 序列化为 SerializedLambda
//这就是MybatisPlus底层的实现,我只是把它单独拿出来了
public class MybatisPlusApplicationTests {
@Test
public void test() {
//SerializedLambda对象为MybatisPlus中的一个类可以自行查看
SerializedLambda serializedLambda = getSerializedLambda(Banner::getBannerName);
System.out.println(serializedLambda.getImplMethodName()); //输出结果为:getBannerName,再做的个简单的字符串截取即可获得bannerName属性名
}
public static SerializedLambda getSerializedLambda(SFunction<Banner, ?> lambda) {
SerializedLambda serializedLambda = null;
try {
ObjectInputStream objIn = new ObjectInputStream(new ByteArrayInputStream(serialize(lambda))) {
protected Class<?> resolveClass(ObjectStreamClass objectStreamClass) throws IOException, ClassNotFoundException {
Class<?> clazz = super.resolveClass(objectStreamClass);
return clazz == java.lang.invoke.SerializedLambda.class ? SerializedLambda.class : clazz;
}
};
serializedLambda = (SerializedLambda) objIn.readObject();
} catch (Exception x) {
}
return serializedLambda;
}
public static byte[] serialize(Object object) {
if (object == null) {
return null;
} else {
ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);
try {
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(object);
oos.flush();
} catch (IOException var3) {
throw new IllegalArgumentException("Failed to serialize object of type: " + object.getClass(), var3);
}
return baos.toByteArray();
}
}
}