(no commit message)
[utils] / support / src / org / wamblee / general / SpringBeanFactory.java
1 /*
2  * Copyright 2005 the original author or authors.
3  * 
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  * 
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  * 
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.wamblee.general;
17
18 import org.springframework.beans.BeansException;
19 import org.springframework.beans.factory.access.BeanFactoryLocator;
20 import org.springframework.beans.factory.access.BeanFactoryReference;
21 import org.springframework.context.access.ContextSingletonBeanFactoryLocator;
22
23 /**
24  * Bean factory which uses Spring. This bean factory cannot be configured
25  * directly in the {@link org.wamblee.general.BeanKernel} because it does not
26  * provide a default no-arg constructor. Therefore, it must be delegated to or
27  * it must tbe subclassed to provide a default constructor.
28  */
29 public class SpringBeanFactory implements BeanFactory {
30
31     private BeanFactoryReference _factoryReference;
32
33     /**
34      * Constructs the bean factory.
35      *
36      * @param aSelector
37      *            Selector to find the appropriate bean ref context.
38      * @param aFactoryName
39      *            Spring bean factory to use.
40      */
41     public SpringBeanFactory(String aSelector, String aFactoryName) {
42         BeanFactoryLocator locator = ContextSingletonBeanFactoryLocator
43                 .getInstance(aSelector);
44         _factoryReference = locator.useBeanFactory(aFactoryName);
45     }
46
47     /*
48      * (non-Javadoc)
49      * 
50      * @see org.wamblee.general.BeanFactory#find(java.lang.String)
51      */
52     public Object find(String aId) {
53         return find(aId, Object.class);
54     }
55
56     /*
57      * (non-Javadoc)
58      * 
59      * @see org.wamblee.general.BeanFactory#find(java.lang.Class)
60      */
61     public <T> T find(Class<T> aClass) {
62         return find(aClass.getName(), aClass);
63     }
64
65     /*
66      * (non-Javadoc)
67      * 
68      * @see org.wamblee.general.BeanFactory#find(java.lang.String,
69      *      java.lang.Class)
70      */
71     public <T> T find(String aId, Class<T> aClass) {
72         try {
73             Object obj = _factoryReference.getFactory().getBean(aId, aClass);
74             assert obj != null;
75             return aClass.cast(obj);
76         } catch (BeansException e) {
77             throw new BeanFactoryException(e.getMessage(), e);
78         }
79     }
80
81 }