(no commit message)
[utils] / support / src / org / wamblee / general / SpringBeanFactory.java
index eda621102c2dbfccbc950b5bcc523b4358d11059..91ac1c3f28fbb85e49bc6c9979572092266e0508 100644 (file)
@@ -12,7 +12,7 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
- */ 
+ */
 package org.wamblee.general;
 
 import org.springframework.beans.BeansException;
@@ -21,46 +21,59 @@ import org.springframework.beans.factory.access.BeanFactoryReference;
 import org.springframework.context.access.ContextSingletonBeanFactoryLocator;
 
 /**
- * Bean factory which uses Spring. 
+ * Bean factory which uses Spring. This bean factory cannot be configured
+ * directly in the {@link org.wamblee.general.BeanKernel} because it does not
+ * provide a default no-arg constructor. Therefore, it must be delegated to or
+ * it must tbe subclassed to provide a default constructor.
  */
 public class SpringBeanFactory implements BeanFactory {
-    
-    private String _factoryName; 
-    
+
+    private BeanFactoryReference _factoryReference;
+
     /**
-     * Constructs the bean factory. 
-     * @param aFactoryName Spring bean factory to use. 
+     * Constructs the bean factory.
+     *
+     * @param aSelector
+     *            Selector to find the appropriate bean ref context.
+     * @param aFactoryName
+     *            Spring bean factory to use.
      */
-    public SpringBeanFactory(String aFactoryName) {
-        _factoryName = aFactoryName; 
+    public SpringBeanFactory(String aSelector, String aFactoryName) {
+        BeanFactoryLocator locator = ContextSingletonBeanFactoryLocator
+                .getInstance(aSelector);
+        _factoryReference = locator.useBeanFactory(aFactoryName);
     }
 
-    /* (non-Javadoc)
+    /*
+     * (non-Javadoc)
+     * 
      * @see org.wamblee.general.BeanFactory#find(java.lang.String)
      */
     public Object find(String aId) {
-       return find(aId, Object.class);
+        return find(aId, Object.class);
     }
 
-    /* (non-Javadoc)
+    /*
+     * (non-Javadoc)
+     * 
      * @see org.wamblee.general.BeanFactory#find(java.lang.Class)
      */
     public <T> T find(Class<T> aClass) {
         return find(aClass.getName(), aClass);
     }
 
-    /* (non-Javadoc)
-     * @see org.wamblee.general.BeanFactory#find(java.lang.String, java.lang.Class)
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.wamblee.general.BeanFactory#find(java.lang.String,
+     *      java.lang.Class)
      */
     public <T> T find(String aId, Class<T> aClass) {
-        BeanFactoryLocator locator = ContextSingletonBeanFactoryLocator.getInstance(); 
-        BeanFactoryReference beanFactory = locator.useBeanFactory(_factoryName);
-       
         try {
-            Object obj = beanFactory.getFactory().getBean(aId, aClass);
-            assert obj != null; 
-            return aClass.cast(obj); 
-        } catch (BeansException e) { 
+            Object obj = _factoryReference.getFactory().getBean(aId, aClass);
+            assert obj != null;
+            return aClass.cast(obj);
+        } catch (BeansException e) {
             throw new BeanFactoryException(e.getMessage(), e);
         }
     }