Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Simple Spring, use of ClasspathApplicationContext for standalone apps, how to reuse?

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 bootstrap 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.

like image 321
Berlin Brown Avatar asked Oct 14 '22 16:10

Berlin Brown


1 Answers

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.

like image 119
Jon Avatar answered Oct 19 '22 02:10

Jon