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

将预构造的Bean添加到Spring应用程序上下文,第1张

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

我发现两个Spring接口可以用来实现我所需要的。该BeanNameAware接口允许Spring通过调用来告诉一个对象的应用程序上下文中它的名字setBeanName(字符串)方法。该FactoryBean的接口告诉Spring不使用对象本身,而是当返回,而对象的getObject()方法被调用。将它们放在一起,您将获得:

public class PlaceholderBean implements BeanNameAware, FactoryBean {    public static Map<String, Object> beansByName = new HashMap<String, Object>();    private String beanName;    @Override    public void setBeanName(String beanName) {        this.beanName = beanName;    }    @Override    public Object getObject() {        return beansByName.get(beanName);    }    @Override    public Class<?> getObjectType() {        return beansByName.get(beanName).getClass();    }    @Override    public boolean isSingleton() {        return true;    }}

Bean的定义现在简化为:

<bean id="dataSource"  />

占位符在创建应用程序上下文之前会获得其值。

public void run(DataSource externalDataSource) {    PlaceholderBean.beansByName.put("dataSource", externalDataSource);    ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");    assert externalDataSource == context.getBean("dataSource");}

事情似乎已成功运行!



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5561526.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存