我想使用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是用camelcase名称实现A的类。使用lombok,我注入了b,现在在一些函数中调用b的一些方法。然而我意识到b.method仍然指向接口A,而不是b.
@NonNull不是必需的Lombok将生成一个带有标记为final或@NonNull的字段的构造函数您可以只声明接口类型就自动连线并从小写开始以camel大小写给出实现类名。此外,您还需要将您的实现声明为bran,并将其注入到类中。@Inject是java-e-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;
}
但是,如果您有一个接口的多个实现,您可以使用名称为bean的@Qualifier,或者使用lombok的上面的示例,其中A b是实现的名称