![](/img/trans.png)
[英]Is it possible to disable an autoconfiguration class from another autoconfiguration class in spring boot?
[英]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.