Elasticsearch8.15 springboot配置类简单解释
0、配置类代码
java
@Configuration
public class ElasticsearchConfig {
// 从配置文件中读取 Elasticsearch 服务器的 URL
@Value("${spring.elasticsearch.rest.uris}")
private String serverUrl;
// 从配置文件中读取用户名
@Value("${spring.elasticsearch.rest.username}")
private String username;
// 从配置文件中读取密码
@Value("${spring.elasticsearch.rest.password}")
private String password;
// 定义一个 Spring Bean,用于创建 ElasticsearchClient 实例
@Bean
public ElasticsearchClient esClient() throws IOException {
// 创建基本身份验证,用于设置用户名和密码
BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password));
// 创建 RestClient,用于与 Elasticsearch 进行低级别通信
RestClient restClient = RestClient.builder(HttpHost.create(serverUrl))
.setHttpClientConfigCallback(httpClientBuilder -> {
// 将 BasicCredentialsProvider 配置到 HttpClient 中
return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
}).build();
// 创建传输层,用于将 RestClient 与 Jackson JSON 解析器结合使用
ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());
// 返回 ElasticsearchClient 实例
return new ElasticsearchClient(transport);
}
}
在 Spring 框架中,@Bean
注解用于告诉 Spring 这个方法会返回一个对象,该对象将被注册为 Spring 容器中的一个 Bean。
1. 什么是 @Bean
?
@Bean
注解通常用在配置类(通常带有 @Configuration
注解的类)中的方法上,用于将该方法返回的对象注册到 Spring 容器中。这样,Spring 就会自动管理这个对象的生命周期,并可以在应用的其他地方通过依赖注入(@Autowired
或 @Inject
)来使用这个对象。
2. 方法作为一个 Bean?
是的,方法也可以作为一个 Bean。在 @Configuration
类中,带有 @Bean
注解的方法会告诉 Spring 框架,这个方法返回的实例将作为一个 Bean 注册到应用程序上下文中。每次调用这个方法时,Spring 会管理这个方法返回的对象。
3. 配置类解读
上面的 ElasticsearchConfig
类是一个配置类,它使用 @Bean
注解将 esClient()
方法定义为一个 Spring Bean。这样做的结果是,Spring 会将 esClient()
方法的返回值(即 ElasticsearchClient
实例)注册为一个 Bean。随后,这个 ElasticsearchClient
对象可以通过依赖注入来被其他类使用。
4. 作用
当 Spring Boot 启动时,它会扫描带有 @Configuration
注解的类,并调用带有 @Bean
注解的方法。返回的对象会被注册到 Spring 的上下文中,随后你可以通过 @Autowired
注解将这个 Bean 注入到其他组件中。
java
@Service
public class SomeService {
@Autowired
private ElasticsearchClient elasticsearchClient;
// 这里可以使用注入的 ElasticsearchClient 进行操作
}
这样,当你需要 ElasticsearchClient
实例时,Spring 会自动创建并注入该实例,而你不需要在代码中手动实例化和管理它。
5. 总结
@Bean
注解用于注册 Spring 管理的 Bean,方法可以作为一个 Bean,这种方式常用于需要复杂初始化逻辑的对象。例如,配置第三方库的客户端(如 ElasticsearchClient
)并将其注册为 Spring Bean,确保可以在其他类中复用。