2009-07-10 40 views
9

Tôi có một FileSystemXmlApplicationContext và tôi muốn đậu được định nghĩa trong XML để mất một đối số nhà xây dựng một bean mà không được khai báo trong mùa xuânLàm thế nào tôi có thể tiêm một bean vào một ApplicationContext trước khi nó tải từ một tập tin?

Ví dụ, tôi muốn làm:

<bean class="some.MyClass"> 
    <constructor-arg ref="myBean" /> 
</bean> 

Vì vậy, tôi có thể tưởng tượng làm điều này thông qua một cái gì đó như:

Object myBean = ... 
context = new FileSystemXmlApplicationContext(xmlFile); 
context.addBean("myBean", myBean); //add myBean before processing 
context.refresh(); 

Ngoại trừ việc không có phương pháp như vậy :-(không ai biết làm thế nào tôi có thể đạt được điều này

Trả lời

15

Làm thế nào về việc tạo một bối cảnh gốc trống rỗng theo chương trình trước tiên, đăng ký đối tượng của bạn như một singleton với bối cảnh đó BeanFactory bằng cách sử dụng thực tế là getBeanFactory trả về việc triển khai SingletonBeanRegistry.

parentContext = new ClassPathXmlApplicationContext(); 
parentContext.refresh(); //THIS IS REQUIRED 
parentContext.getBeanFactory().registerSingleton("myBean", myBean) 

Sau đó chỉ định bối cảnh này làm cha mẹ cho ngữ cảnh "thực" của bạn Các hạt trong ngữ cảnh con sẽ có thể tham chiếu đến bean trong bố mẹ.

String[] fs = new String[] { "/path/to/myfile.xml" } 
appContext = new FileSystemXmlApplicationContext(fs, parentContext); 
+0

tôi sẽ kiểm tra này và upvote bạn! (Chỉ cần lấy mã để biên dịch :-) –

+0

ApplicationContext không thực hiện SingletonBeanRegistry –

+0

Tôi đã chơi xung quanh theo đề xuất của bạn mà không có may mắn. Thêm trợ giúp chào mừng! –

1

Như tôi đã gặp khó khăn giải quyết điều này với một AnnotationConfigApplicationContext, tôi thấy phương án sau:

DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); 
beanFactory.registerSingleton("customBean", new CustomBean()); 
context = new AnnotationConfigApplicationContext(beanFactory); 
context.register(ContextConfiguration.class); 
context.refresh(); 
Các vấn đề liên quan