我想使用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。
答案 0 :(得分:3)
@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;
}
}
Lombok示例:
@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是实现的名称