X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=support%2Fsrc%2Forg%2Fwamblee%2Fgeneral%2FSpringBeanFactory.java;h=27a544b1d81da635928e7c47eb3bd02b9aac04e3;hb=baec7e77039ed838bab52671931830f1623d9fc4;hp=05a421e80794ea56b779b4073a7f2617f7abe83a;hpb=caa126385642ffc57478e928ab871bc09c53e993;p=utils diff --git a/support/src/org/wamblee/general/SpringBeanFactory.java b/support/src/org/wamblee/general/SpringBeanFactory.java index 05a421e8..27a544b1 100644 --- a/support/src/org/wamblee/general/SpringBeanFactory.java +++ b/support/src/org/wamblee/general/SpringBeanFactory.java @@ -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,42 +21,65 @@ 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; - - 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 find(Class 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 find(String aId, Class 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); } }