Elasticsearch8.15 springboot配置类简单解释

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,确保可以在其他类中复用。

相关推荐
5***84649 分钟前
Spring全家桶简介
java·后端·spring
苏三的开发日记20 分钟前
minio服务集群搭建
后端
开心猴爷20 分钟前
苹果iOS应用上架App Store必看指南与规则
后端
哈哈哈笑什么26 分钟前
解决微服务系统中跨服务的超卖、库存锁定不释放、消息丢失、重复扣减库存等核心问题
后端
晨非辰31 分钟前
算法闯关日记 Episode :解锁链表「环形」迷局与「相交」奥秘
数据结构·c++·人工智能·后端·python·深度学习·神经网络
小周在成长32 分钟前
Java 权限修饰符(Access Modifiers)指南
后端
00后程序员35 分钟前
iOS 上架 4.3,重复 App 审核条款的真实逻辑与团队应对策略研究
后端
00后程序员44 分钟前
专业的 IPA 处理工具 构建可维护、可回滚的 iOS 成品加工与加固流水线
后端
百度Geek说1 小时前
项目级效能提升一站式交付最佳实践
后端
今天你TLE了吗1 小时前
通过RocketMQ延时消息实现优惠券等业务MySQL当中定时自动过期
java·spring boot·后端·学习·rocketmq