如何在运行时实例化Spring托管的bean?

如何在运行时实例化Spring托管的bean?,第1张

如何在运行时实例化Spring托管的bean?

看起来我找到了解决方案。当我使用基于Java的配置时,它甚至比您想像的还要简单。xml中的替代方法是lookup-method,但是仅从Spring
4.1.X版本开始,因为它支持将参数传递给方法。

这是一个完整的工作示例

public class Container {    private List<RuntimeBean> runtimeBeans = new ArrayList<RuntimeBean>();    private RuntimeBeanFactory runtimeBeanFactory;    public void load() {        // repeated several times depending on external data/environment        runtimeBeans.add(createRuntimeBean("Some external info1"));        runtimeBeans.add(createRuntimeBean("Some external info2"));    }    public RuntimeBean createRuntimeBean(String info) {         // should create bean which internally can have some          // spring annotations or in other words         // should be managed by spring         return runtimeBeanFactory.createRuntimeBean(info)    }    public void setRuntimeBeanFactory(RuntimeBeanFactory runtimeBeanFactory) {        this.runtimeBeanFactory = runtimeBeanFactory    }}public interface RuntimeBeanFactory {    RuntimeBean createRuntimeBean(String info);}//and finally@Configurationpublic class ApplicationConfiguration {    @Bean    Container container() {        Container container = new Container(beanToInject());        container.setBeanRuntimeFactory(runtimeBeanFactory());        return container;    }    // LOOK HOW IT IS SIMPLE IN THE JAVA ConFIGURATION    @Bean     public BeanRuntimeFactory runtimeBeanFactory() {        return new BeanRuntimeFactory() { public RuntimeBean createRuntimeBean(String beanName) {     return runtimeBean(beanName); }        };    }    @Bean    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)    RuntimeBean runtimeBean(String beanName) {        return new RuntimeBean(beanName);    }}class RuntimeBean {    @Autowired    Container container;}

而已。

感谢大家。



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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存