@Override protected BeanFactoryInternal init(AppConfig config, BeanFactory externalFactory) { this.config = config; this.externalFactory = externalFactory; this.beanContainer = new BeanContainer(config); return this; }
@Override public void addAlias(Class<?> type, String name, String alias) { beanContainer.addAlias(type, name, alias); }
@Override public void addAlias(Class<?> type, String name, String alias) { ensureAppNotInited(); addAliasDefinition(new AliasDefinition("runtime", alias, type, name)); }
@Override public <T> T getOrAddBean(Class<T> type, String name) throws BeanException { T bean = tryGetBean(type, name); if(null == bean){ //add bean definition and try again. addBeanDefinition(createBeanDefinition(type, name)); bean = tryGetBean(type, name); } return bean; }
@Override public <T> void addBean(Class<T> type, T bean, boolean primary) { addBeanDefinition(createBeanDefinition(type, bean, primary)); }
@Override public <T> void addBean(String id, boolean lazyInit, Class<? extends T> beanClass, Object... constructorArgs) throws BeanException { ensureAppNotInited(); addBeanDefinition(xmlBeanDefinitionLoader.create(id, lazyInit, beanClass, constructorArgs)); }
ensureContainerNotInited(); this.checkAfterLoading(); this.initAfterLoading(); initializing = false; addBean(AppConfigurator.class, configurator, true); for(AppConfigInitializer ci : getBeans(AppConfigInitializer.class)) { ci.init(appContext, configurator); this.resolveAfterLoading(); for(BeanFactoryInitializable initializable : initializables) { try{ initializable.postInit(getAppConfig(), this, bds); }catch (Throwable e) { throw new AppInitException(e.getMessage(), e); AppConfigBase c = (AppConfigBase)config; c.setPropertyProvider(tryCreateBean(PropertyProvider.class)); List<AppConfigSupport> preSupports = getBeans(AppConfigSupport.class, "pre"); List<AppConfigSupport> postSupports = getBeans(AppConfigSupport.class, "post", true);
protected Object doCreateBeanOnly(BeanDefinitionBase bd) { if(initializing){ throw new IllegalStateException("Cannot get bean when this container is initializing"); } Object bean; if(isBeanCurrentlyInCreation(bd)){ bean = getBeanCurrentlyInCreation(bd); if(null != bean){ return bean; } throw new BeanCreationException("Requested bean '" + bd + "' is currently in creation: Is there an unresolvable circular reference?"); } beforeBeanCreation(bd); bean = doBeanCreation(bd); afterBeanCreation(bd); bd.setInited(true); return bean; }
protected Object doCreateProxy(BeanDefinitionBase pd, Class<?> type, Object bean){ Object proxy; if(ProxyBean.class.isAssignableFrom(pd.getBeanClass())) { proxy = doCreateBeanOnly(pd); ((ProxyBean)proxy).setTargetBean(bean); }else{ ReflectConstructor c = ReflectClass.of(pd.getBeanClass()).getConstructor(type); if(null == c) { throw new BeanCreationException("Can't create proxy '" + pd.getBeanClass() + "', No valid constructor"); } proxy = c.newInstance(bean); beforeBeanCreation(pd); processBeanCreation(pd, proxy); afterBeanCreation(pd); pd.setInited(true); } return proxy; }
@Override public <T> void addBean(T bean) { addBean((Class<T>)bean.getClass(),bean,true); }
container.addAliasDefinition(readAlias(container, reader, context)); return; BeanDefinitionBase bd = readBean(container, reader, context); if (null != bd) { container.addBeanDefinition(bd); BeanDefinitionBase bd = readBean(container, reader, context, true); if (null != bd) { container.addBeanDefinition(bd, true); container.addBeanDefinition(readListBean(container, reader, context)); return; container.addBeanDefinition(readMapBean(container, reader, context)); return; container.addBeanDefinition(readSetBean(container, reader, context)); return;
protected void addBeanDefinition(BeanDefinitionBase bd) throws BeanDefinitionException { addBeanDefinition(bd, false); }
protected void readInit(BeanContainer container, XmlReader reader, LoaderContext context) { if(!testIfAttributes(container, reader)) { reader.nextToEndElement(); return; } container.addInitDefinition(new InitDefinition(reader.getSource(), reader.getRequiredAttribute(CLASS_ATTRIBUTE), reader.getAttribute(INIT_METHOD_ATTRIBUTE))); }
protected void processBeanList(BeanContainer container, XmlReader reader, LoaderContext context) { Object source = reader.getSource(); Class<?> beanType = classAttribute(reader, TYPE_ATTRIBUTE, true); String qualifier = reader.getAttribute(QUALIFIER_ATTRIBUTE); boolean override = reader.getBooleanAttribute(OVERRIDE_ATTRIBUTE, context.defaultOverride); List<ValueDefinition> values = new ArrayList<ValueDefinition>(); final QName elementName = reader.getElementName(); while (reader.nextWhileNotEnd(elementName)) { if (reader.isStartElement()) { if (reader.isStartElement(DESCRIPTION_ELEMENT)) { continue; } if (reader.isStartElement(REF_ELEMENT)) { values.add(readRefElement(context, reader)); continue; } if (reader.isStartElement(BEAN_ELEMENT)) { BeanDefinition bd = readBean(container, reader, context); if (null != bd) { values.add(new ValueDefinition(bd)); } continue; } throw new BeanDefinitionException("The value element '" + reader.getElementLocalName() + "' not supported in 'bean-list' element, source : " + reader.getSource()); } } container.addBeanList(new BeanListDefinition(source, beanType, qualifier, override, values)); }
@Override public <T> T getOrAddBean(Class<T> type) throws BeanException { T bean = tryGetBean(type); if(null == bean) { //add bean definition and try again. addBeanDefinition(createBeanDefinition(type)); bean = tryGetBean(type); } return bean; }
@Override public <T> void addBean(Class<? super T> typeClass, boolean primary, boolean lazyInit, Class<T> beanClass, Object... constructorArgs) throws BeanException { ensureAppNotInited(); addBeanDefinition(xmlBeanDefinitionLoader.create(typeClass, primary, lazyInit, beanClass, constructorArgs)); }
@Override public <T> void addBean(Class<T> type, T bean, String name, boolean primary) { addBeanDefinition(createBeanDefinition(type, bean, name, primary)); }
@Override public <T> void addBean(Class<T> type, T bean, String name, boolean primary) { Args.notNull(type,"type"); Args.notNull(bean,"bean"); /* if(primary && tryGetBean(type) != null){ throw new BeanDefinitionException("Primary bean of type '" + type.getName() + "' aleady exists"); } */ this.beanContainer.addBean(type, bean, name, primary); }
container.addBeanDefinition(bd);
@Override public <T> void addBean(Class<? super T> typeClass, boolean primary, String name, boolean lazyInit, Class<T> beanClass, Object... constructorArgs) throws BeanException { ensureAppNotInited(); addBeanDefinition(xmlBeanDefinitionLoader.create(typeClass, primary, name, lazyInit, beanClass, constructorArgs)); }