gpt4 book ai didi

java - 在没有注释或 xml 配置的情况下创建主要 bean

转载 作者:太空宇宙 更新时间:2023-11-04 11:33:38 25 4
gpt4 key购买 nike

我的项目依赖于另一个项目,并从中导入 Bean(使用 @ImportResource("foo.xml"))。

foo.xml 定义了两个数据源(datasource1datasource2),我想让 datasource1 成为主要数据源(这样 Spring Boot 的所有自动配置都可以工作)。

这可能吗?我发现有一个DefaultListableBeanFactorydeterminePrimaryCandidate方法。所以我的想法是创建我自己的 ListableBeanFactory,它将扩展 DefaultListableBeanFactory,但是如何强制 Spring Boot 使用我的实现?

或者也许还有另一种更简单的方法将给定 bean 标记为primary(无需更改定义它的配置)。

最佳答案

您可以在项目中创建一个配置,该配置会构建一个注释为 @Primary bean 的新数据源。这个新数据源将是 datasource1,它将由 spring 注入(inject)到新数据源工厂方法中。这里有工作示例。

配置:

@SpringBootApplication
public class BeanSpringExampleApplication
{

@Bean(name = "dataSource1")
public FakeDataSource dataSource1()
{
return new FakeDataSource("dataSource1");
}

@Bean(name = "dataSource2")
public FakeDataSource dataSource2()
{
return new FakeDataSource("dataSource2");
}

@Bean
@Primary
public FakeDataSource primaryDataSource(
@Qualifier("dataSource1") FakeDataSource dataSource1)
{
return dataSource1;
}
}

在这里您可以看到三个 bean(使用 FakeDataSource 类),它们模拟了您的情况。 primaryDataSource bean 工厂方法仅返回 dataSource1(它只是一个数据源选择器)。

FakeDataSource 只是一个占位符,以使示例可运行:

public class FakeDataSource
{
private final String fakeProperty;

public FakeDataSource(String id)
{
fakeProperty = id;
}

/**
* @return the fakeProperty
*/
public String getFakeProperty()
{
return fakeProperty;
}
}

最后,测试证明一切正常:

@RunWith(SpringRunner.class)
@SpringBootTest
public class BeanSpringExampleApplicationTests
{
@Autowired
private FakeDataSource fakeDataSource;

@Test
public void should_AutowirePrimaryDataSource() throws Exception
{
assertEquals("dataSource1", fakeDataSource.getFakeProperty());
}

}

关于java - 在没有注释或 xml 配置的情况下创建主要 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43520993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com