Removed DOCUMENT ME comments that were generated and applied source code
[utils] / support / spring / src / main / java / org / wamblee / general / spring / 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.spring;
17
18 import org.springframework.beans.BeansException;
19 import org.springframework.beans.factory.access.BeanFactoryLocator;
20 import org.springframework.beans.factory.access.BeanFactoryReference;
21
22 import org.springframework.context.access.ContextSingletonBeanFactoryLocator;
23
24 import org.wamblee.general.BeanFactory;
25 import org.wamblee.general.BeanFactoryException;
26 import org.wamblee.general.BeanKernel;
27
28 /**
29  * Bean factory which uses Spring. This bean factory cannot be configured
30  * directly in the {@link org.wamblee.general.BeanKernel} because it does not
31  * provide a default no-arg constructor. Therefore, it must be delegated to or
32  * it must tbe subclassed to provide a default constructor.
33  */
34 public class SpringBeanFactory implements BeanFactory {
35     private BeanFactoryReference factoryReference;
36
37     /**
38      * Constructs the bean factory.
39      * 
40      * @param aSelector
41      *            Selector to find the appropriate bean ref context.
42      * @param aFactoryName
43      *            Spring bean factory to use.
44      */
45     public SpringBeanFactory(String aSelector, String aFactoryName) {
46         try {
47             BeanFactoryLocator locator = ContextSingletonBeanFactoryLocator
48                 .getInstance(aSelector);
49             factoryReference = locator.useBeanFactory(aFactoryName);
50         } catch (BeansException e) {
51             throw new BeanFactoryException(
52                 "Could not load bean factory: selector = '" + aSelector +
53                     "', factory = '" + aFactoryName + "'", e);
54         }
55     }
56
57     /*
58      * (non-Javadoc)
59      * 
60      * @see org.wamblee.general.BeanFactory#find(java.lang.String)
61      */
62     public Object find(String aId) {
63         return find(aId, Object.class);
64     }
65
66     /*
67      * (non-Javadoc)
68      * 
69      * @see org.wamblee.general.BeanFactory#find(java.lang.Class)
70      */
71     public <T> T find(Class<T> aClass) {
72         return find(aClass.getName(), aClass);
73     }
74
75     /*
76      * (non-Javadoc)
77      * 
78      * @see org.wamblee.general.BeanFactory#find(java.lang.String,
79      * java.lang.Class)
80      */
81     public <T> T find(String aId, Class<T> aClass) {
82         try {
83             Object obj = factoryReference.getFactory().getBean(aId, aClass);
84             assert obj != null;
85
86             return aClass.cast(obj);
87         } catch (BeansException e) {
88             throw new BeanFactoryException(e.getMessage(), e);
89         }
90     }
91
92     /**
93      * Gets the spring bean factory.
94      * 
95      * @return Spring bean factory.
96      */
97     public org.springframework.beans.factory.BeanFactory getSpringBeanFactory() {
98         return factoryReference.getFactory();
99     }
100 }