如果我将 Lombok 连接到项目,如何使用 @autowired 注释注入 beans?
这些链接上的答案似乎不稳定(支持?):
从 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 4.3 开始,如果一个类仅定义一个构造函数,Spring 将理解使用该构造函数,而无需添加
@Autowired
或任何其他注释。只需确保您有一个合适的构造函数即可。
正如@vszholobov提到的,您可以使用
@RequiredArgsConstructor
或@AllArgsConstructor
;通常最好使您的依赖项final
,因此除非您有类似默认的Clock
之类的东西,否则它们基本上是等效的。 (这也适用于创建构造函数的其他样式,例如 Groovy 的 @TupleConstructor(defaults = false)
。)
在旧版本的 Spring 中,您需要 Lombok 用
@Autowired
注释构造函数,例如@AllArgsConstructor(onConstructor = @__(@Autowired))
。
如果您在 Spring Boot 项目中使用 Lombok,您仍然可以使用 @Autowired 注解进行依赖注入。 Lombok 与 Spring 注释无缝协作,包括 @Autowired。以下是如何使用 Lombok 在 Spring Boot 项目中使用 @Autowired 注入 Bean:
添加Lombok依赖: 确保您已将 Lombok 依赖项添加到您的项目中,如下所述 在之前的回复中。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version> <!-- Use the latest version -->
<scope>provided</scope>
</dependency>
启用注释处理: 确保您已配置 IDE(例如 IntelliJ IDEA、Eclipse)以启用 Lombok 的注释处理。这一步对于识别 Lombok 生成的方法和字段至关重要。
用@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
}