2011-07-25 92 views
1

我有一个春天的问题。我用基于注释的配置替换基于xml文件的spring配置。正因为如此,我遇到了以下问题。 Theres是一个类,其中一个字段由基于类的自动装配配置。从那时起,只有一个候选人。但是现在有更多的候选人,因为我已经添加了@Named标签来为相同接口的多个类添加多个标签。Java弹簧注解问题

下面是一个代码示例: 与自动装配字段的类:

public class AutowiringClass<X, Y> { 
    // This is the field which is autowired 
    private Autowired<X, Y> bean; 
    ..... 
} 

然后有一个第二类,这与特定的通用参数延伸AutoWiringClass:

public class TestClass extends AutoWiringClass<ObjectX, ObjectY> { 
    ..... 
} 

存在的问题是那个弹簧不知道应该使用哪个类,因为类型自动装配的类不止一次,而且具有不同的泛型类型(ObjectX,ObjectY)。我想,这不同的泛型类型会做的事..但他们不:( 这将是真棒,如果任何人有,一个解决方案。

回答

0

泛型不会帮你因类型擦除 ,Spring对此无能为力,但你可以使用@Primary注释来表示应该总是使用的默认实现,或者按名称而不是按类型切换到自动装配,然后当有疑问时,Spring将使用字段名称

3

Qualifiers是你正在寻找的东西当你注册一个类作为Spring bean(使用@Component之类)时,你可以传递一个名字作为参数,然后当你自动装配一个属性,添加一个@Qualifier注释与该bean的名称。所以:

@Component("Test1") 
public class Test { } 
@Component("Test2") 
public class BetterTest extends Test {} 

public class TestUser { 
    @Autowired 
    @Qualifier("Test1") 
    private Test test; 
} 
+0

没有多数民众赞成我不是在找。对不起,我应该提到那个,但我是forogt。问题是,有多个TestClasses扩展了AutoWiringClass。但是在这个TestClass中,AutoWiringClass的泛型是不同的,但是Java并没有注意到它:(将来会有新的TestClass,但TestClass的程序员不应该关心设置关于Qualifier的变量,我希望有一种方法可以实现这一点。 – itsme