Java @RequiredArgsConstructor(onConstructor=@u U(@Inject))和@RequiredArgsConstructor之间有什么区别?
龙目山与龙目山有什么区别Java @RequiredArgsConstructor(onConstructor=@u U(@Inject))和@RequiredArgsConstructor之间有什么区别?,java,spring,lombok,inject,Java,Spring,Lombok,Inject,龙目山与龙目山有什么区别 @RequiredArgsConstructor 及 我知道,RequiredArgsConstructor只在构造函数中注入所有最终依赖项。第二个将把您提到的注释放在生成的构造函数上 例如,这个:@RequiredArgsConstructor(onConstructor=@_u(@Inject)) 将生成带有@Inject @RequiredArgsConstructor class MyClass { private final DependencyA a
@RequiredArgsConstructor
及
我知道,
RequiredArgsConstructor
只在构造函数中注入所有最终依赖项。第二个将把您提到的注释放在生成的构造函数上
例如,这个:@RequiredArgsConstructor(onConstructor=@_u(@Inject))
将生成带有@Inject
@RequiredArgsConstructor
class MyClass {
private final DependencyA a;
private final DependencyB b;
}
将产生
public MyClass(DependencyA a, DependencyB b) {
this.a = a;
this.b = b;
}
当
@RequiredArgsConstructor(onConstructor = @__(@Inject))
class MyClass {
private final DependencyA a;
private final DependencyB b;
}
将产生
@Inject
public MyClass(DependencyA a, DependencyB b) {
this.a = a;
this.b = b;
}
从JDK 8开始,还接受语法@RequiredArgsConstructor(onConstructor \={@Inject})
我知道RequiredArgsConstructor
注入所有最终依赖项
所有必需的依赖项,包括
final
和@NonNull
字段。我将用简单的示例解释这些注释
何时使用@RequiredArgsConstructor
香草爪哇
如果您有一个或多个字段是final(非null),则使用@RequiredArgsConstructor
龙目爪哇岛
何时使用@RequiredArgsConstructor(onConstructor=@uu(@Inject))
香草爪哇
如果您有一个具有自己类型的字段,那么将在配置类中创建bean实例。然后,您可以在@RequiredArgsConstructor(onConstructor=@\uuuUuUuUUUUUUUUUUUZ(@inject))的帮助下,使用构造函数注入将该bean实例注入到Item类的shop字段中
但我的建议是不要使用@RequiredArgsConstructor(onConstructor=@u u(@Inject))
当您使用Spring时。你可以通过两种方式克服它
@AllArgsConstructor
public class Item {
private final Shop shop;
}
公共类项目{
private final Shop shop;
@Autowired
public Item(Shop shop)
{
this.shop=shop;
}
}
@AllArgsConstructor
public class Item {
private final Shop shop;
}
@RequiredArgsConstructor不能与非最终字段一起使用。给出的答案清楚地解释了OP所要求的区别。但是我也觉得知道为什么需要
@RequiredArgsConstructor(onConstructor=@Inject))
而不是@requiredArgs构造函数也很重要。如果您感兴趣,请继续阅读
简而言之,当Spring构建bean时(用@Component或相关@Controller、@Service、@Repository注释的类-它们都有@Component+额外的功能),Spring将需要查看类构造函数来构造它。如果类中只有一个构造函数,很好,没有混淆,您只需要@RequiredArgsConstructor
如果您有两个或更多构造函数呢?Spring使用哪一个来构造您的bean?输入@RequiredArgsConstructor(onConstructor=@\uUu(@Inject))
或更流行的@RequiredArgsConstructor(onConstructor=@\uUu(@Autowired))
。正如注释的属性所说,它将@Autowired放在构造函数上,告诉Spring在构造时使用该构造函数
就这样!注:如果您想了解更多,我建议您。N.B.从Spring 4.3开始,如果只有一个构造函数,您就不再使用
@Inject
/@Autowired
。因此,在这种情况下,给定的示例中没有有效的区别。您的意思是“this.shop=shop;”而不是“this.price=price;”,对吧?谢谢。这是个错误,修改了答案
public class Item {
private final Shop shop;
public Item(Shop shop)
{
this.shop=shop;
}
}
private final Shop shop;
@Autowired
public Item(Shop shop)
{
this.shop=shop;
}
}
@AllArgsConstructor
public class Item {
private final Shop shop;
}
public class Item {
private String price;
public Item(String price)
{
this.price=price;
}
}
@AllArgsConstructor
public class Item {
private String price;
}