无法使用@Inject注释注入基类

时间:2017-05-09 10:55:04

标签: spring spring-mvc annotations

无法直接注入基类

基础抽象类

@Component
public abstract class A{
}

Here are my derived classes
@Named("abc")
public class B extends A{
}

@Named("cde")
public class C extends A{
}

我正在尝试在我的资源类中调用A但是遇到以下错误。

@Inject
private A a

@Component
public class Resource implements ServiceImpl{
 @Inject
    public Resource(final Client client,
            final A a) {
        Assert.notNull(client);
        Assert.notNull(a);

        this.client = client;
        this.a= a;

    }

    @Override
    public Response method1(final Request request) {
        Response response = null;
         try {
                response = (PaymentResponse) this.a.process(request);
            }
            catch (final Exception ex) {
                ex.printstackTrace();
            }


            return response;
        }
    }

    @Override
    public Response method2(final Request request) {
       Response response = null;
        try {
            response =  this.a.process(request);
        }
        catch (final Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return response;

    }
}

启动应用程序时出错:

  

org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为'资源'在文件中定义   没有合格的bean类型' a'定义:预期的单个匹配bean,但找到2:b,c

1 个答案:

答案 0 :(得分:0)

要注入正确的bean,您必须使用@Qualifier注释。

 @Inject @Qualifier("abc")
 private A a;

现在Spring不知道你想要注射什么豆。 ' ABC'或者' cde'。

由于你的基类是抽象的,你无法创建它的实例,因此spring正在尝试注入被删除的类。这就是为什么你必须通过正确地注释它来决定需要注入什么类的原因。