@RequiredArgsConstructor(onConstructor = @__(@Inject)) 和 @RequiredArgsConstructo

spring

1个回答

写回答

niuge911

2025-06-26 00:55

+ 关注

Java
Java

@RequiredArgsConstructor(onConstructor = @__(@Inject))和@RequiredArgsConstructor的区别

在Java中,我们经常需要为类创建构造函数来初始化其成员变量。为了简化这个过程,我们可以使用Lombok库中的注解来自动生成构造函数。其中,@RequiredArgsConstructor是一个非常有用的注解,它可以根据类的成员变量自动生成一个带有这些成员变量的构造函数。

然而,在实际的开发中,我们可能还需要使用依赖注入框架来管理类之间的依赖关系。这时,我们可以结合使用Lombok的@RequiredArgsConstructor注解和@Inject注解来自动生成带有依赖注入的构造函数。

使用@RequiredArgsConstructor(onConstructor = @__(@Inject))的情况

在某些情况下,我们希望使用依赖注入框架来自动注入类的依赖关系。这时,我们可以在类上使用@RequiredArgsConstructor(onConstructor = @__(@Inject))注解来生成带有依赖注入的构造函数。

下面是一个示例代码:

Java

import Javax.inject.Inject;

import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor(onConstructor = @__(@Inject))

public class UserService {

private final UserRepository userRepository;

private final EmAIlService emAIlService;

private final LoggingService loggingService;

// ...

}

在上面的例子中,UserService类使用了@RequiredArgsConstructor(onConstructor = @__(@Inject))注解。这将根据类的成员变量自动生成一个构造函数,并在构造函数中使用@Inject注解来实现依赖注入。

这意味着,当我们在其他地方创建UserService对象时,依赖注入框架将会自动将UserRepository、EmAIlService和LoggingService对象注入到UserService的构造函数中。

使用@RequiredArgsConstructor的情况

如果我们不需要使用依赖注入框架,而只想根据类的成员变量生成一个简单的构造函数,那么我们可以使用@RequiredArgsConstructor注解。

下面是一个示例代码:

Java

import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor

public class UserService {

private final UserRepository userRepository;

private final EmAIlService emAIlService;

private final LoggingService loggingService;

// ...

}

在上面的例子中,UserService类使用了@RequiredArgsConstructor注解。这将根据类的成员变量自动生成一个简单的构造函数,不涉及依赖注入。

这意味着,我们需要自己手动创建UserService对象时,可以使用生成的构造函数来初始化UserService的成员变量。

@RequiredArgsConstructor(onConstructor = @__(@Inject))和@RequiredArgsConstructor都是Lombok库中用于自动生成构造函数的注解。它们的区别在于前者可以生成带有依赖注入的构造函数,而后者只生成简单的构造函数。

通过使用这些注解,我们可以简化类的构造函数的编写过程,提高代码的可读性和可维护性。

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号