* 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;
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;
-
- public SpringBeanFactory(String aFactoryName) {
- _factoryName = aFactoryName;
+
+ private BeanFactoryReference _factoryReference;
+
+ /**
+ * Constructs the bean factory.
+ *
+ * @param aSelector
+ * Selector to find the appropriate bean ref context.
+ * @param aFactoryName
+ * Spring bean factory to use.
+ */
+ public SpringBeanFactory(String aSelector, String aFactoryName) {
+ try {
+ BeanFactoryLocator locator = ContextSingletonBeanFactoryLocator
+ .getInstance(aSelector);
+ _factoryReference = locator.useBeanFactory(aFactoryName);
+ } catch (BeansException e) {
+ throw new BeanFactoryException(
+ "Could not load bean factory: selector = '" + aSelector
+ + "', factory = '" + aFactoryName + "'", e);
+ }
}
- /* (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);
}
}