DATACMNS-1121 - ProxyProjectionFactory now returns instance as is if it implements the target.

If you previously asked ProxyProjectionFactory for a proxy of an interface which the target instance already implements, it created a proxy although it could've returned the instance as is. It's now actually doing that avoiding superfluous proxy creation.
This commit is contained in:
Oliver Gierke
2017-07-20 14:29:54 +02:00
parent 721888f052
commit d7011a3da5
2 changed files with 13 additions and 3 deletions

View File

@@ -109,8 +109,8 @@ class ProxyProjectionFactory implements ProjectionFactory, ResourceLoaderAware,
Assert.notNull(projectionType, "Projection type must not be null!");
Assert.isTrue(projectionType.isInterface(), "Projection type must be an interface!");
if (source == null) {
return null;
if (source == null || projectionType.isInstance(source)) {
return (T) source;
}
ProxyFactory factory = new ProxyFactory();

View File

@@ -212,7 +212,17 @@ public class ProxyProjectionFactoryUnitTests {
assertThat(data.get("key"), is(nullValue()));
}
static class Customer {
@Test // DATACMNS-1121
public void doesNotCreateWrappingProxyIfTargetImplementsProjectionInterface() {
Customer customer = new Customer();
assertThat(factory.createProjection(Contact.class, customer) == customer, is(true));
}
interface Contact {}
static class Customer implements Contact {
public Long id;
public String firstname, lastname;