views:

1270

answers:

1

If I have a standalone main application. Say 20 classes. They all may need to interface with the beans defined by the spring configuration (ApplicationContext) at any time. I would boostrap the classpath application context at the main application entry point. But how do you reuse the already instantiated beans?

For example, it seems like a bad approach to setup the ClasspathApplicationContext as a singleton, but that would be the idea.

I thought I had seen a GlobalContextLocator or something along those lines but didn't seen an example on how to use it.

+4  A: 

There are a number of ways to do it. Your best reference is here:

http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#context-introduction

and the specific classes you need to look at are SingletonBeanFactoryLocator and ContextSingletonBeanFactoryLocator.

If you use the SingletonBeanFactoryLocator you can use the following to look up beans:

BeanFactoryLocator bfl = SingletonBeanFactoryLocator.getInstance();
BeanFactoryReference bf = bfl.useBeanFactory("com.mycompany.myapp");
MyClass zed = bf.getFactory().getBean("mybean");

There is a very good explanation of this in detail in the Javadocs:

http://static.springframework.org/spring/docs/2.5.x/api/org/springframework/beans/factory/access/SingletonBeanFactoryLocator.html

Also, just to be clear, make sure that the config file is in your classpath for your application, otherwise the lookup will fail.

Jon