byte-buddy
byte-buddy copied to clipboard
How to redefine dynamically created classes?
byte-buddy version:1.14.19
Firstly, I have successfully dynamically defined a class
com.pf.test.entity.TestEntity
Class<?> entityClass = new ByteBuddy()
.subclass(BaseEntity.class)
.name("com.pf.test.entity.TestEntity")
.defineProperty("name", String.class)
.defineProperty("cityCode", String.class)
.make()
.load(getClass().getClassLoader(), ClassLoadingStrategy.Default.INJECTION)
.getLoaded();
Now I want to add another property to this class
Method method = ClassLoader.class.getDeclaredMethod("findLoadedClass", String.class);
method.setAccessible(true);
Class<?> oldEntityClass = (Class<?>) method.invoke(this.getClass().getClassLoader(), "com.pf.test.entity.TestEntity");
ByteBuddyAgent.install();
Loaded<?> entityClass = new ByteBuddy()
.redefine(oldEntityClass)
.name(tableBean.getEntity().getClassName())
.defineProperty("city_level", Integer.class)
.make()
.load(String.class.getClassLoader(), ClassReloadingStrategy.fromInstalledAgent());
bug I get the following exception
java.lang.IllegalStateException: Could not locate class file for com.pf.test.entity.TestEntity
at net.bytebuddy.dynamic.ClassFileLocator$Resolution$Illegal.resolve(ClassFileLocator.java:118) ~[byte-buddy-1.11.22.jar:na]
at net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining.create(TypeWriter.java:3913) ~[byte-buddy-1.11.22.jar:na]
at net.bytebuddy.dynamic.scaffold.TypeWriter$Default.make(TypeWriter.java:2192) ~[byte-buddy-1.11.22.jar:na]
at net.bytebuddy.dynamic.scaffold.inline.RedefinitionDynamicTypeBuilder.make(RedefinitionDynamicTypeBuilder.java:224) ~[byte-buddy-1.11.22.jar:na]
at net.bytebuddy.dynamic.scaffold.inline.AbstractInliningDynamicTypeBuilder.make(AbstractInliningDynamicTypeBuilder.java:123) ~[byte-buddy-1.11.22.jar:na]
at net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase.make(DynamicType.java:3658) ~[byte-buddy-1.11.22.jar:na]
at net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase$Delegator.make(DynamicType.java:3896) ~[byte-buddy-1.11.22.jar:na]