簡體   English   中英

在 Spring 引導自動配置中使用子 class 擴展數據源

[英]Extending DataSource with a sub class in Spring Boot AutoConfiguration

我正在嘗試編寫一個自動配置庫,為任何DataSource添加功能。 我編寫了一個子類,我將在這里調用CustomDataSource並覆蓋DataSource的一些方法。

@Configuration
@ConditionalOnBean(DataSource.class)
@AutoConfigureAfter(DataSourceAutoConfiguration.class)
public class CustomDataSourceAutoConfiguration {

    private final DataSource dataSource;

    public CustomDataSourceAutoConfiguration(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    @Primary
    @Bean
    public CustomDataSource customDataSource() {
        return new CustomDataSource(dataSource);
    }
}

但我找不到讓我做我想做的事的方法。 它總是會導致循環引用和異常:

BeanCurrentlyInCreationException: Error creating bean with name 'customDataSource': Requested bean is currently in creation: Is there an unresolvable circular reference?

有沒有解決的辦法?

我找到了一種通過實現BeanPostProcessor來解決此問題的方法:

public class DataSourcePostProcessor implements BeanPostProcessor {

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) {
        if (bean instanceof DataSource && !(bean instanceof CustomDataSource)) {
            return new CustomDataSource((DataSource) bean);
        } else {
            return bean;
        }
    }

}

postProcessAfterInitialization方法可以顯式用於將 bean 包裝在代理中,引用BeanPostProcessor文檔

[...] 使用代理包裝 bean 的后處理器通常會實現postProcessAfterInitialization(java.lang.Object, java.lang.String)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM