[英]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.