Lombok 和@Autowired

问题描述 投票:0回答:4

如果我将 Lombok 连接到项目,如何使用 @autowired 注释注入 beans?

这些链接上的答案似乎不稳定(支持?):

Spring + Lombok:我可以@Autowired @Setter

IDEA 中的 Spring 支持与 Lombok:是否支持“导航到自动装配依赖项”?

java spring annotations lombok
4个回答
23
投票

从 Spring 4.3 版本开始,单个 bean 构造函数不需要使用

@Autowired
注解进行注释。

这使得可以使用

@RequiredArgsConstructor
@AllArgsConstructor
注释进行依赖注入:

@Component
@RequiredArgsConstructor
public class Example {
    private final ExampleDependency dependency;

    public void example() {
        dependency.call();
    }
}

在上面的示例中,lombok 将创建一个具有单个

dependency
字段的构造函数,并且由于这是唯一的构造函数,Spring 将通过它注入依赖项。

如果您的 Spring 版本低于 4.3,或者您使用多个构造函数,您可以使用

@Autowired
字段使用
onConstructor
注解来注释所需的 lombok 构造函数:

@RequiredArgsConstructor(onConstructor = @__(@Autowired))

Spring 中使用 Lombok 进行构造函数注入


4
投票

从 Spring 4.3 开始,如果一个类仅定义一个构造函数,Spring 将理解使用该构造函数,而无需添加

@Autowired
或任何其他注释。只需确保您有一个合适的构造函数即可。

正如@vszholobov提到的,您可以使用

@RequiredArgsConstructor
@AllArgsConstructor
;通常最好使您的依赖项
final
,因此除非您有类似默认的
Clock
之类的东西,否则它们基本上是等效的。 (这也适用于创建构造函数的其他样式,例如 Groovy 的
@TupleConstructor(defaults = false)
。)


2
投票

在旧版本的 Spring 中,您需要 Lombok 用

@Autowired
注释构造函数,例如
@AllArgsConstructor(onConstructor = @__(@Autowired))


0
投票

如果您在 Spring Boot 项目中使用 Lombok,您仍然可以使用 @Autowired 注解进行依赖注入。 Lombok 与 Spring 注释无缝协作,包括 @Autowired。以下是如何使用 Lombok 在 Spring Boot 项目中使用 @Autowired 注入 Bean:

  1. 添加Lombok依赖: 确保您已将 Lombok 依赖项添加到您的项目中,如下所述 在之前的回复中。

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.22</version> <!-- Use the latest version -->
        <scope>provided</scope>
    </dependency>
    
  2. 启用注释处理: 确保您已配置 IDE(例如 IntelliJ IDEA、Eclipse)以启用 Lombok 的注释处理。这一步对于识别 Lombok 生成的方法和字段至关重要。

  3. 用@Autowired注释一个类: 要将 Spring bean 注入到类中,可以使用 @Autowired 注释。您可以使用 @Autowired 注解构造函数、字段或 setter 方法。下面是使用构造函数将 bean 注入到类中的示例:

    导入 org.springframework.beans.factory.annotation.Autowired; 导入 org.springframework.stereotype.Service;

    @服务 公共类我的服务{ 私有最终 MyRepository myRepository;

    @Autowired
    public MyService(MyRepository myRepository) {
        this.myRepository = myRepository;
    }
    
    // ... other methods using myRepository
    

    }

© www.soinside.com 2019 - 2024. All rights reserved.