import org.wamblee.io.InputResource;
/**
- * The standard means to obtain the bean factory.
+ * The standard means to obtain the bean factory. This works by reading a
+ * property {@value #BEAN_FACTORY_CLASS} from a property file named
+ * {@value #BEAN_KERNEL_PROP_FILE} from the class path. This property identifies
+ * the bean factory implementation to use. The configured bean factory must have
+ * a no-arg constructor.
*/
public final class BeanKernel {
* Cached bean factory.
*/
private static BeanFactory BEAN_FACTORY;
-
+
/**
* Disabled constructor.
- *
+ *
*/
- private BeanKernel() {
+ private BeanKernel() {
// Empty
}
}
/**
- * Gets the bean factory.
- * @return Bean factory.
+ * Gets the bean factory.
+ *
+ * @return Bean factory.
*/
public static BeanFactory getBeanFactory() {
synchronized (BeanFactory.class) {
if (BEAN_FACTORY == null) {
- BEAN_FACTORY = lookupBeanFactory();
+ BEAN_FACTORY = lookupBeanFactory(BEAN_KERNEL_PROP_FILE);
}
}
return BEAN_FACTORY;
*
* @return Bean factory.
*/
- private static BeanFactory lookupBeanFactory() {
- InputResource resource = new ClassPathResource(BEAN_KERNEL_PROP_FILE);
+ static BeanFactory lookupBeanFactory(String aPropertyFilename) {
+ InputResource resource = new ClassPathResource(aPropertyFilename);
InputStream is;
try {
is = resource.getInputStream();
}
try {
Properties props = new Properties();
- props.load(resource.getInputStream());
+ props.load(is);
String className = props.getProperty(BEAN_FACTORY_CLASS);
Class beanFactory = Class.forName(className);
return (BeanFactory) beanFactory.newInstance();