protected void addNotRepeatAdditionalTypeDef(BeanDefinitionBase bd, Class<?> cls){ for(TypeDefinition def : bd.getAdditionalTypeDefs()){ if(def.getType() == cls){ return; } } TypeDefinitionBase def = new TypeDefinitionBase(); def.setType(cls); bd.addAdditionalTypeDef(def); } }
protected void readInvoke(BeanContainer container, XmlReader reader, LoaderContext context, BeanDefinitionBase bean) { InvokeDefinition invoke = new InvokeDefinition(); readMethodDefinition(reader, context, bean, bean.getBeanClass(), invoke, true); bean.addInvoke(invoke); }
protected void initNonLazyBeans() { for(BeanDefinitionBase bd : bds.allBeanDefinitions){ if(!bd.isLazyInit()){ doGetBean(bd); } } }
protected BeanDefinitionBase readMapBean(BeanContainer container, XmlReader reader, LoaderContext context) { BeanDefinitionBase bean = new BeanDefinitionBase(reader.getSource()); readValuedBeanAttributes(container, reader, context, bean); bean.setBeanClass(classAttribute(reader, MAP_CLASS_ATTRIBUTE, false)); bean.setValueDefinition(readMap(container, reader, context)); bean.getValueDefinition().setDefinedType(bean.getBeanClass()); if (null == bean.getBeanClass()) { bean.setBeanClass(LinkedHashMap.class); } return bean; }
protected void readConstructorArgument(BeanContainer container, XmlReader reader, LoaderContext context, BeanDefinitionBase bean) { ArgumentDefinition arg = new ArgumentDefinition(); arg.setTypeClassName(reader.getAttribute(TYPE_ATTRIBUTE)); arg.setDefaultValue(reader.getAttribute(DEFAULT_VALUE_ATTRIBUTE)); arg.setValueDefinition(readValue(container, reader, context, CONSTRUCTOR_ARG_ELEMENT)); bean.addConstructorArgument(arg); }
protected Object doGetBeanReferenceInstance(BeanReference br){ BeanDefinitionBase referenced = findBeanDefinition(br); if(referenced == null){ throw new BeanDefinitionException("The referenced bean not exists : " + br); } br.setTargetBeanDefinition(referenced); Object bean = doGetBean(referenced); if(null == bean) { throw new BeanCreationException("The referenced bean '" + referenced + "' not exists!"); } return bean; }
@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)); }
@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; }
public BeanContainer(AppConfig config){ this.config = config; this.beanConfigurator = new BeanConfigurator(config); this.placeholderResolver = config.getPlaceholderResolver(); this.annotationBeanDefinitionLoader = new AnnotationBeanDefinitionLoader(); this.xmlBeanDefinitionLoader = new XmlBeanDefinitionLoader(this); }
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 destroyBeans() { for(BeanDefinitionBase bd : bds.allBeanDefinitions){ Object instance = bd.getSingletonInstance(); if(null != instance){ doDestroyBean(bd, instance); } } }
@Override public <T> T tryCreateBean(String namespace, String name) { return tryCreateBean(bds.id(namespace, name)); }
@Override public <T> T tryGetBean(String namespace, String name) throws BeanException { return tryGetBean(bds.id(namespace, name)); }
protected ValueDefinition beanReference(LoaderContext context, String ref) { return new ValueDefinition(new BeanReference(ref)); }
/** * Returns an exists or creates a new definition of a primary bean for the given type. */ default BeanDefinitionConfigurator getOrAdd(Class<?> beanClass) { return getOrAdd(beanClass, beanClass); }
protected BeanDefinitionBase readSetBean(BeanContainer container, XmlReader reader, LoaderContext context) { BeanDefinitionBase bean = new BeanDefinitionBase(reader.getSource()); readValuedBeanAttributes(container, reader, context, bean); bean.setBeanClass(classAttribute(reader, SET_CLASS_ATTRIBUTE, false)); bean.setValueDefinition(readSet(container, reader, context)); bean.getValueDefinition().setDefinedType(bean.getBeanClass()); if (null == bean.getBeanClass()) { bean.setBeanClass(LinkedHashSet.class); } 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)); }
protected BeanDefinitionBase readListBean(BeanContainer container, XmlReader reader, LoaderContext context) { BeanDefinitionBase bean = new BeanDefinitionBase(reader.getSource()); readValuedBeanAttributes(container, reader, context, bean); bean.setBeanClass(classAttribute(reader, LIST_CLASS_ATTRIBUTE, false)); bean.setValueDefinition(readList(container, reader, context)); bean.getValueDefinition().setDefinedType(bean.getBeanClass()); if (null == bean.getBeanClass()) { bean.setBeanClass(ArrayList.class); } return bean; }
@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)); }