Browse Source

exclude non-public interfaces when autodetecting proxy interfaces

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@1097 50f2f4bb-b051-0410-bef5-90022cba6387
pull/1/head
Juergen Hoeller 17 years ago
parent
commit
cdcacec6a0
  1. 62
      org.springframework.aop/src/test/java/org/springframework/aop/framework/ProxyFactoryTests.java
  2. 3
      org.springframework.core/src/main/java/org/springframework/util/ClassUtils.java

62
org.springframework.aop/src/test/java/org/springframework/aop/framework/ProxyFactoryTests.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2008 the original author or authors. * Copyright 2002-2009 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -16,12 +16,14 @@
package org.springframework.aop.framework; package org.springframework.aop.framework;
import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.instanceOf;
import static org.junit.Assert.*; import static org.junit.Assert.*;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import javax.swing.*;
import javax.accessibility.Accessible;
import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation; import org.aopalliance.intercept.MethodInvocation;
import org.junit.Test; import org.junit.Test;
@ -310,6 +312,15 @@ public final class ProxyFactoryTests {
assertTrue(proxy instanceof TestBean); assertTrue(proxy instanceof TestBean);
} }
@Test
public void testExclusionOfNonPublicInterfaces() {
JFrame frame = new JFrame();
ProxyFactory proxyFactory = new ProxyFactory(frame);
Object proxy = proxyFactory.getProxy();
assertTrue(proxy instanceof RootPaneContainer);
assertTrue(proxy instanceof Accessible);
}
public static class Concrete { public static class Concrete {
@ -317,43 +328,36 @@ public final class ProxyFactoryTests {
} }
} }
}
@SuppressWarnings("serial")
private static class CountingBeforeAdvice extends MethodCounter implements MethodBeforeAdvice {
/** public void before(Method m, Object[] args, Object target) throws Throwable {
* Simple before advice example that we can use for counting checks. count(m);
* }
* @author Rod Johnson
*/
@SuppressWarnings("serial")
class CountingBeforeAdvice extends MethodCounter implements MethodBeforeAdvice {
public void before(Method m, Object[] args, Object target) throws Throwable {
count(m);
} }
}
@SuppressWarnings("serial")
private static class TimestampIntroductionInterceptor extends DelegatingIntroductionInterceptor
implements TimeStamped {
@SuppressWarnings("serial") private long ts;
class TimestampIntroductionInterceptor extends DelegatingIntroductionInterceptor
implements TimeStamped {
private long ts; public TimestampIntroductionInterceptor() {
}
public TimestampIntroductionInterceptor() { public TimestampIntroductionInterceptor(long ts) {
} this.ts = ts;
}
public TimestampIntroductionInterceptor(long ts) { public void setTime(long ts) {
this.ts = ts; this.ts = ts;
} }
public void setTime(long ts) {
this.ts = ts;
}
public long getTimeStamp() { public long getTimeStamp() {
return ts; return ts;
}
} }
} }

3
org.springframework.core/src/main/java/org/springframework/util/ClassUtils.java

@ -948,7 +948,8 @@ public abstract class ClassUtils {
while (clazz != null) { while (clazz != null) {
Class[] ifcs = clazz.getInterfaces(); Class[] ifcs = clazz.getInterfaces();
for (Class ifc : ifcs) { for (Class ifc : ifcs) {
if (!interfaces.contains(ifc) && (classLoader == null || isVisible(ifc, classLoader))) { if (!interfaces.contains(ifc) && Modifier.isPublic(ifc.getModifiers()) &&
(classLoader == null || isVisible(ifc, classLoader))) {
interfaces.add(ifc); interfaces.add(ifc);
} }
} }

Loading…
Cancel
Save