gpt4 book ai didi

java - 将预先构造的 Bean 添加到 Spring 应用程序上下文

转载 作者:IT老高 更新时间:2023-10-28 13:47:56 26 4
gpt4 key购买 nike

我正在编写一个实现以下方法的类:

public void run(javax.sql.DataSource dataSource);

在此方法中,我希望使用类似于以下的配置文件来构造一个 Spring 应用程序上下文:

<bean id="dataSource" abstract="true" />

<bean id="dao" class="my.Dao">
<property name="dataSource" ref="dataSource" />
</bean>

是否可以强制 Spring 使用传递给我的方法的 DataSource 对象,只要配置文件中引用了“dataSource”bean 吗?

最佳答案

我也遇到过同样的情况。由于没有人提出我的解决方案(而且我认为我的解决方案更优雅),我会在这里为后代添加它:-)

解决方案包括两个步骤:

  1. 创建父 ApplicationContext 并在其中注册您现有的 bean。
  2. 创建子 ApplicationContext(传入父上下文)并从 XML 文件加载 bean

第 1 步:

//create parent BeanFactory
DefaultListableBeanFactory parentBeanFactory = new DefaultListableBeanFactory();
//register your pre-fabricated object in it
parentBeanFactory.registerSingleton("dataSource", dataSource);
//wrap BeanFactory inside ApplicationContext
GenericApplicationContext parentContext =
new GenericApplicationContext(parentBeanFactory);
parentContext.refresh(); //as suggested "itzgeoff", to overcome a warning about events

第 2 步:

//create your "child" ApplicationContext that contains the beans from "beans.xml"
//note that we are passing previously made parent ApplicationContext as parent
ApplicationContext context = new ClassPathXmlApplicationContext(
new String[] {"beans.xml"}, parentContext);

关于java - 将预先构造的 Bean 添加到 Spring 应用程序上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/496711/

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