对构造函数使用 lombok 与 Inject 之间的区别

Difference between using lombok vs Inject for constructor

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

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

另一种方法是使用注入:

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

想知道有什么不同吗?

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

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

@Inject
private final ClassB b;

不同之处在于 b 仅在构造函数执行后才会被注入,为此您需要使用 @PostConstruct 创建方法来执行本来应该完成的事情在构造函数中。