簡體   English   中英

Spring Inject接口實現

[英]Spring inject interface implementation

我想使用lombok注入從如下所示的接口實現的類:

@RequiredArgsConstructor(onConstructor = @_(@Inject))
public class className {
    @NonNull
    private final ClassA1 a1 implements ClassA;
    ...
}

但是顯然這是行不通的,那么正確的方法是什么?

=================

編輯:或者我應該這樣做嗎?

public class className {
        private ClassA a1;
        public className(A1 a1) {
        this.a1 = a1; }
    }

===================這是在聽完Mykhailo Moskura的建議后的代碼:

@Component
@RequiredArgsConstructor(onConstructor = @_(@Inject))
public class C {
     @NonNull
     private A b;
     public someFunction() {
        b.method();
     }
}

這里A是接口,而b是使用駝峰名稱實現A的類。 然后使用lombok注入b,然后在某些函數中調用b的某些方法。 但是我意識到b.method仍然指向接口A,而不是B。

不需要@NonNull Lombok會生成帶有標記為final或@NonNull的字段的構造函數。您可以自動聲明接口類型並以小寫開頭的駝峰形式給出實現類名稱。 另外,您還需要將實現聲明為bran以及要在其中注入的類。 @Inject是java ee CDI依賴項。 @Autowired是特定於彈簧的。 Spring兩者都支持,但它說使用@Autowired這是一個示例:

public interface A{
}

@Component
public class B implements A{
}

@Component
public class C {
  private A a;
@Autowired
  public C(A a){
   this.a = a;  
}
}

龍目島樣本:

 @RequiredArgsConstructor
   @Component
    public class C {
      //Here it will inject the implementation of A interface with name of implementation (As we have name of impl B we declare field as b , if HelloBeanImpl then helloBeanImpl
     private A b;
    }

但是,如果您有一個接口的許多實現,則可以將@Qualifier與bean的名稱一起使用,或者將上述示例與lombok一起使用,其中A b其中b是實現的名稱

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM