对构造函数使用 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
创建方法来执行本来应该完成的事情在构造函数中。
注入构造函数的两种方法:
@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
创建方法来执行本来应该完成的事情在构造函数中。