parent
efe3a35da8
commit
cf51f0c0aa
|
@ -18,6 +18,7 @@ package org.springframework.test.util;
|
||||||
|
|
||||||
import org.springframework.aop.framework.Advised;
|
import org.springframework.aop.framework.Advised;
|
||||||
import org.springframework.aop.support.AopUtils;
|
import org.springframework.aop.support.AopUtils;
|
||||||
|
import org.springframework.util.Assert;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@code AopTestUtils} is a collection of AOP-related utility methods for
|
* {@code AopTestUtils} is a collection of AOP-related utility methods for
|
||||||
|
@ -41,7 +42,8 @@ public class AopTestUtils {
|
||||||
* be returned; otherwise, the {@code candidate} will be returned
|
* be returned; otherwise, the {@code candidate} will be returned
|
||||||
* <em>as is</em>.
|
* <em>as is</em>.
|
||||||
*
|
*
|
||||||
* @param candidate the instance to check (potentially a Spring AOP proxy)
|
* @param candidate the instance to check (potentially a Spring AOP proxy);
|
||||||
|
* never {@code null}
|
||||||
* @return the target object or the {@code candidate}; never {@code null}
|
* @return the target object or the {@code candidate}; never {@code null}
|
||||||
* @throws IllegalStateException if an error occurs while unwrapping a proxy
|
* @throws IllegalStateException if an error occurs while unwrapping a proxy
|
||||||
* @see Advised#getTargetSource()
|
* @see Advised#getTargetSource()
|
||||||
|
@ -49,6 +51,7 @@ public class AopTestUtils {
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public static <T> T getTargetObject(Object candidate) {
|
public static <T> T getTargetObject(Object candidate) {
|
||||||
|
Assert.notNull(candidate, "candidate must not be null");
|
||||||
try {
|
try {
|
||||||
if (AopUtils.isAopProxy(candidate) && (candidate instanceof Advised)) {
|
if (AopUtils.isAopProxy(candidate) && (candidate instanceof Advised)) {
|
||||||
return (T) ((Advised) candidate).getTargetSource().getTarget();
|
return (T) ((Advised) candidate).getTargetSource().getTarget();
|
||||||
|
@ -57,8 +60,6 @@ public class AopTestUtils {
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
throw new IllegalStateException("Failed to unwrap proxied object.", e);
|
throw new IllegalStateException("Failed to unwrap proxied object.", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
// else
|
|
||||||
return (T) candidate;
|
return (T) candidate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,7 +72,8 @@ public class AopTestUtils {
|
||||||
* nested proxies will be returned; otherwise, the {@code candidate}
|
* nested proxies will be returned; otherwise, the {@code candidate}
|
||||||
* will be returned <em>as is</em>.
|
* will be returned <em>as is</em>.
|
||||||
*
|
*
|
||||||
* @param candidate the instance to check (potentially a Spring AOP proxy)
|
* @param candidate the instance to check (potentially a Spring AOP proxy);
|
||||||
|
* never {@code null}
|
||||||
* @return the ultimate target object or the {@code candidate}; never
|
* @return the ultimate target object or the {@code candidate}; never
|
||||||
* {@code null}
|
* {@code null}
|
||||||
* @throws IllegalStateException if an error occurs while unwrapping a proxy
|
* @throws IllegalStateException if an error occurs while unwrapping a proxy
|
||||||
|
@ -80,6 +82,7 @@ public class AopTestUtils {
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public static <T> T getUltimateTargetObject(Object candidate) {
|
public static <T> T getUltimateTargetObject(Object candidate) {
|
||||||
|
Assert.notNull(candidate, "candidate must not be null");
|
||||||
try {
|
try {
|
||||||
if (AopUtils.isAopProxy(candidate) && (candidate instanceof Advised)) {
|
if (AopUtils.isAopProxy(candidate) && (candidate instanceof Advised)) {
|
||||||
return (T) getUltimateTargetObject(((Advised) candidate).getTargetSource().getTarget());
|
return (T) getUltimateTargetObject(((Advised) candidate).getTargetSource().getTarget());
|
||||||
|
@ -88,8 +91,6 @@ public class AopTestUtils {
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
throw new IllegalStateException("Failed to unwrap proxied object.", e);
|
throw new IllegalStateException("Failed to unwrap proxied object.", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
// else
|
|
||||||
return (T) candidate;
|
return (T) candidate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,11 @@ public class AopTestUtilsTests {
|
||||||
private final FooImpl foo = new FooImpl();
|
private final FooImpl foo = new FooImpl();
|
||||||
|
|
||||||
|
|
||||||
|
@Test(expected = IllegalArgumentException.class)
|
||||||
|
public void getTargetObjectForNull() {
|
||||||
|
getTargetObject(null);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getTargetObjectForNonProxiedObject() {
|
public void getTargetObjectForNonProxiedObject() {
|
||||||
Foo target = getTargetObject(foo);
|
Foo target = getTargetObject(foo);
|
||||||
|
@ -66,6 +71,11 @@ public class AopTestUtilsTests {
|
||||||
assertNotSame(foo, target);
|
assertNotSame(foo, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test(expected = IllegalArgumentException.class)
|
||||||
|
public void getUltimateTargetObjectForNull() {
|
||||||
|
getUltimateTargetObject(null);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getUltimateTargetObjectForNonProxiedObject() {
|
public void getUltimateTargetObjectForNonProxiedObject() {
|
||||||
Foo target = getUltimateTargetObject(foo);
|
Foo target = getUltimateTargetObject(foo);
|
||||||
|
|
Loading…
Reference in New Issue