不多说直接上代码
//这就是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 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();
}
}
}