Browse Source
Add BridgeMethodResolver#isJava6VisibilityBridgeMethodPair to distinguish between (a) bridge methods introduced in Java 6 to compensate for inheriting public methods from non-public superclasses and (b) bridge methods that have existed since Java 5 to accommodate return type covariance and generic parameters. In the former case, annotations should be looked up from the original bridged method (SPR-7900). In the latter, the annotation should be looked up against the bridge method itself (SPR-8660). As noted in the Javadoc for the new method, see http://stas-blogspot.blogspot.com/2010/03/java-bridge-methods-explained.html for a useful description of the various types of bridge methods, as well as http://bugs.sun.com/view_bug.do?bug_id=6342411, the bug fixed in Java 6 resulting in the introduction of 'visibility bridge methods'. Issue: SPR-8660, SPR-7900pull/7/head
Chris Beams
13 years ago
3 changed files with 87 additions and 6 deletions
@ -0,0 +1,61 @@
@@ -0,0 +1,61 @@
|
||||
/* |
||||
* Copyright 2002-2011 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.beans.factory.annotation; |
||||
|
||||
import static org.junit.Assert.assertNotNull; |
||||
|
||||
import javax.inject.Inject; |
||||
import javax.inject.Named; |
||||
|
||||
import org.junit.Test; |
||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext; |
||||
import org.springframework.stereotype.Component; |
||||
|
||||
public class BridgeMethodAutowiringTests { |
||||
|
||||
@Test |
||||
public void SPR_8434() { |
||||
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); |
||||
ctx.register(UserServiceImpl.class, Foo.class); |
||||
ctx.refresh(); |
||||
assertNotNull(ctx.getBean(UserServiceImpl.class).object); |
||||
} |
||||
|
||||
} |
||||
|
||||
|
||||
abstract class GenericServiceImpl<D extends Object> { |
||||
|
||||
public abstract void setObject(D object); |
||||
|
||||
} |
||||
|
||||
|
||||
class UserServiceImpl extends GenericServiceImpl<Foo> { |
||||
|
||||
protected Foo object; |
||||
|
||||
@Inject |
||||
@Named("userObject") |
||||
public void setObject(Foo object) { |
||||
this.object = object; |
||||
} |
||||
} |
||||
|
||||
@Component("userObject") |
||||
class Foo { } |
||||
|
Loading…
Reference in new issue