栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Spring Boot中以编程方式创建bean?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Spring Boot中以编程方式创建bean?

如何创建bean并要求Spring Boot向其中注入值?

就像是

@Bean@ConfigurationProperties("ds.client1")public DataSource dataSourceClient1() {    DataSourceBuilder.create().build();}@Bean@ConfigurationProperties("ds.client2")public DataSource dataSourceClient2() {    DataSourceBuilder.create().build();}

然后,

ds.client1
名称空间中的任何设置都属于第一个数据源(即
ds.client1.password
该数据源的密码
DataSource
)。

但是,也许您不知道将拥有多少数据源?这变得越来越复杂,尤其是当您需要将那些动态数据源注入其他对象时。如果只需要按名称查找它们,则可以将它们自己注册为单例。这是一个有效的例子

@ConfigurationProperties(prefix = "ds")public class DataSourceSettings implements BeanFactoryAware {    private List<String> clients = new ArrayList<>();    private BeanFactory beanFactory;    public List<String> getClients() {        return clients;    }    public void setClients(List<String> clients) {        this.clients = clients;    }    @Override    public void setBeanFactory(BeanFactory beanFactory) {        this.beanFactory = beanFactory;    }    @PostConstruct    public void configure() {        Map<String, String> clientDataSources = new HashMap<String, String>();        for (String client : clients) { // extract client name String[] parts = client.split("\|"); String clientName = parts[0]; String url = parts[1]; // client to datasource mapping String dsName = url.substring(url.lastIndexOf("/") + 1); if (clientName.contains(",")) {     // multiple clients with same datasource     String[] clientList = clientName.split(",");     for (String c : clientList) {         clientDataSources.put(c, url);     } } else {      clientDataSources.put(clientName, url); }        }        Assert.state(beanFactory instanceof ConfigurableBeanFactory, "wrong bean factory type");        ConfigurableBeanFactory configurableBeanFactory = (ConfigurableBeanFactory) beanFactory;        for (Map.Entry<String, String> entry : clientDataSources.entrySet()) { DataSource dataSource = createDataSource(entry.getValue()); configurableBeanFactory.registerSingleton(entry.getKey(), dataSource);        }    }    private DataSource createDataSource(String url) {        return DataSourceBuilder.create().url(url).build();    }}

请注意,这些bean 可通过bean名称查找获得。让我知道是否适合您。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/428005.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号