Spring的@Autowired构造函数被覆盖/忽略

时间:2015-12-07 16:08:39

标签: java spring dependency-injection

我有两个实现的SomeStartegy接口:

@Primary
@Component
public class OneStrategy implements SomeStrategy {...}
@Component
public class SecondStrategy implements SomeStrategy {...}

我需要将其中一个用作默认(主要)实现,另一个用于在某些情况下覆盖默认值。

所以我写了这样的话:

public class SuperClass {
     @Autowired
     SomeStrategy strategy;
}

public class SubClass extends SuperClass {
     @Autowired
     public SubClass(SecondStrategy secondStrategy) {
         this.strategy = secondStrategy;
     }
}

注入SubClass,我可以在调试中看到它的ctor被调用,并且分配完成就像我期望的那样。 然而,不知何故,它最终会以OneStrategy的实例结束 我在这里错过了什么?或者我这样做是错的吗?

1 个答案:

答案 0 :(得分:1)

构造函数注入后进行字段注入。

也为超类使用构造函数注入,并从子类构造函数中调用super(secondStrategy)