DATACMNS-1079 disables the ClassGeneratingPropertyAccessorFactory for Java 9, which is unfortunately, because we'll lose the nice performance characteristics it has. So should look for an alternative that basically does what the current version does, but in a way that works for Java 9
DATACMNS-992 Fix injection to existing class-loaders
("is duplicated by")
This looks like the same problem as with CGLIB which got addressed by Rafael Winterhalter in CGLIB 3.2.5 a while ago: cglib/cglib@d6fe1d8
Essentially, the immediate solution is to use Unsafe.defineClass instead of making the protected ClassLoader.defineClass accessible. It sounds awkward but it actually cleanly works since Unsafe remains accessible by default even on JDK 9. However, Unsafe.defineClass is marked as deprecated in JDK 9, with MethodHandles.Lookup.defineClass as the official replacement: https://bugs.openjdk.java.net/browse/JDK-8181442. So for Spring Data Kay without any JDK 6 compatibility baggage, it might be better to go with that right away, even if MethodHandles.Lookup.defineClass can still only be called reflectively there.
As an alternative, you could also define those generated classes in a custom child ClassLoader which can cleanly access the protected defineClass method internally. This is the approach that SpEL's compiler mode uses: It works fine there since the generated expressions are internally managed and never leak to the user, so they can be consistently generated and retrieved from an internal child ClassLoader