Java Spring注入接口实现
我想使用lombok注入一个从如下接口实现的类:Java Spring注入接口实现,java,spring,dependency-injection,interface,Java,Spring,Dependency Injection,Interface,我想使用lombok注入一个从如下接口实现的类: @RequiredArgsConstructor(onConstructor = @_(@Inject)) public class className { @NonNull private final ClassA1 a1 implements ClassA; ... } 但是很明显这是行不通的,那么正确的方法是什么呢 ================= 编辑: 还是我应该这样做 public class classN
@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的字段的构造函数
只需声明接口类型,即可自动连线 并从小写开始以驼峰形式给出实现类名。 此外,还需要将实现声明为bran,并将其注入到类中。 @Inject是JavaEECDI依赖项。 @自动连线是特定于弹簧的。 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是实现的名称只需将类型作为接口而不是类,这就是拥有接口的全部意义。因此,
private final ClassA a1
而不是private final ClassA a1
。谢谢,这很有意义。但是在注入“privateffinalclassaa1”之后,我想将a1指定为ClassA1,我应该怎么做?(类似于:private List l,然后l=new ArrayList())ClassA1
是一个ClassA
,因为它实现了这个接口。是的,肯定是这样。但是,如果我想以后特别使用ClassA1,我应该怎么做呢?我能做像a1=新课a1()这样的事吗?可以,如上所述,ClassA1
是ClassA
。这就是基本的Java…“autowire只是声明了接口类型并给出了实现类名”,我该怎么做?谢谢你的代码,我想“private B B”应该是“private A B”?下面是一个示例列表,谢谢。仍然被lombok示例“private A b”弄糊涂了,A是接口名,而b只是一个随机名。那么A怎么知道实现A的是类B呢?B-是从小写开始的实现类的名称(使用CamelCase),例如,如果我有接口HelloWorld和实现它的类HelloWorldImpl,我需要编写HelloWorldImpl