使用lombok与Inject进行构造之间的区别

时间:2018-10-23 22:09:13

标签: dependency-injection constructor lombok

有两种注入构造函数的方法:

@Slf4j
@Component
@RequiredArgsConstructor (onConstructor = @_(@Inject))
public ClassA {
   @NonNull private ClassB b;
}

另一种方法是使用Inject:

@Slf4j
@Component
public class ClassA {
   private final ClassB b;
   @Inject
   public ClassA(ClassB b) {
      this.b = b;
   }
}

想知道有什么区别吗?

1 个答案:

答案 0 :(得分:1)

是的,后者有很多代码:)。 Lombok在编译阶段做了一些magic,也许这两个字节码有些不同,但是结果字节码应该几乎相同,并且功能完全相同。

超出范围:请注意-根据具体情况-直接注入字段可能更加清楚:

@Inject
private final ClassB b;

与之不同的是,b仅在构造函数执行后才被注入,为此,您需要使用@PostConstruct创建方法,否则该方法应在构造函数。