看起来我找到了解决方案。当我使用基于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;}
而已。
感谢大家。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)