public BeanDefinitionBase remove(Class<?> type, Class<?> cls) { Set<BeanDefinitionBase> set = beanTypeDefinitions.get(type); if(null != set) { Set<BeanDefinitionBase> found = new HashSet<>(); Set<BeanDefinitionBase> notFound = new LinkedHashSet<>(); for(BeanDefinitionBase bd : set) { if(bd.getBeanClass().equals(cls)) { found.add(bd); }else{ notFound.add(bd); } } set.clear(); set.addAll(notFound); for(BeanDefinitionBase bd : found) { removeAll(bd); } } return null; }
protected void readProperty(BeanContainer container, XmlReader reader, LoaderContext context, BeanDefinitionBase bean) { if(!testIfAttributes(container, reader)) { reader.nextToEndElement(); return; } PropertyDefinition prop = new PropertyDefinition(); prop.setName(reader.getRequiredAttribute(NAME_ATTRIBUTE)); prop.setDefaultValue(reader.getAttribute(DEFAULT_VALUE_ATTRIBUTE)); prop.setValueDefinition(readValue(container, reader, context, PROPERTY_ELEMENT)); prop.setProperty(bean.getBeanClassType().getProperty(prop.getName())); if (null == prop.getProperty()) { throw new BeanDefinitionException("property '" + prop.getName() + "' not found in bean class '" + bean.getBeanClass().getName() + ", source : " + reader.getSource()); } if (null == prop.getValueDefinition()) { throw new BeanDefinitionException("property '" + prop.getName() + "' must define a value, check source : " + bean.getSource()); } bean.addProperty(prop); }
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 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; }
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 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; }
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; }
protected BeanDefinitionBase add(BeanDefinitionBase bd) throws BeanDefinitionException { if(null != appContext && !appContext.isServletEnvironment()){ boolean ignore; Class<?> beanClass = bd.getBeanClass(); bd.setType(bd.getBeanClass()); Set<BeanDefinitionBase> clsSet = beanClassDefinitions.get(bd.getBeanClass()); if(null == clsSet){ clsSet = new HashSet<>(1); beanClassDefinitions.put(bd.getBeanClass(), clsSet);
protected void readBeanTypeDef(BeanContainer container, XmlReader reader, LoaderContext context, BeanDefinitionBase bean) { TypeDefinitionBase def = new TypeDefinitionBase(); String typeClassName = reader.getRequiredAttribute(TYPE_ATTRIBUTE); Class<?> typeClass = tryForName(typeClassName); if (null == typeClass) { throw new BeanDefinitionException("Class '" + typeClassName + "' not found, check source : " + bean.getSource()); } if (!typeClass.isAssignableFrom(bean.getBeanClass())) { throw new BeanDefinitionException("bean's type '" + typeClassName + "' must be assignable from bean's class '" + bean.getBeanClass().getName() + "', source : " + reader.getSource()); } def.setType(typeClass); def.setName(reader.getAttribute(NAME_ATTRIBUTE)); def.setPrimary(reader.getBooleanAttribute(PRIMARY_ATTRIBUTE, false)); def.setOverride(reader.getBooleanAttribute(OVERRIDE_ATTRIBUTE, context.defaultOverride)); bean.addAdditionalTypeDef(def); }
protected void readBeanFactoryDef(BeanContainer container, XmlReader reader, LoaderContext context, BeanDefinitionBase bean) { if (!(FactoryBean.class.isAssignableFrom(bean.getBeanClass()))) { throw new BeanDefinitionException("Bean [" + bean + "] must be implements FactoryBean"); } String targetTypeName = reader.getRequiredAttribute(TARGET_TYPE_ATTRIBUTE); if (Strings.isEmpty(targetTypeName)) { throw new BeanDefinitionException("Attribute '" + TARGET_TYPE_ATTRIBUTE + "' of element '" + REGISTER_BEAN_FACTORY_ELEMENT + "' must not be empty, source : " + reader.getSource()); } Class<?> targetType = tryForName(targetTypeName); if (null == targetType) { throw new BeanDefinitionException("Target type '" + targetTypeName + "' not found, source : " + reader.getSource()); } bean.addFactoryBeanDef(new FactoryBeanDefinitionBase(targetType)); }
protected void resolveBeanConstructor(BeanDefinitionBase bean) { Class<?> beanClass = bean.getBeanClass(); if (null != beanClass && !bean.getConstructorArguments().isEmpty()) { Constructor<?> beanConstructor = null; Class<?> definedType = bd.getBeanClass(); if (definedType == null) { continue;
bdf.getBeanClass().equals(bd.getBeanClass())){ if(bd.isOverrideAnnotation()){ iterator.remove();
bean.setInitMethod(Reflection.findMethod(bean.getBeanClass(), initMethodName)); if (null == bean.getInitMethod()) { throw new BeanDefinitionException("init method '" + initMethodName + "' not found in class '" + beanClassName + "', source : " + reader.getSource()); bean.setDestroyMethod(Reflection.findMethod(bean.getBeanClass(), destroyMethodName)); if (null == bean.getDestroyMethod()) { throw new BeanDefinitionException("destroy method '" + initMethodName + "' not found in class '" + beanClassName + "', source : " + reader.getSource()); bean.setBeanClassType(BeanType.of(bean.getBeanClass())); if (!type.isAssignableFrom(bean.getBeanClass())) { throw new BeanDefinitionException("bean's type '" + typeClassName + "' must be assignable from bean's class '" + beanClassName + "', source : " + reader.getSource()); bean.setType(bean.getBeanClass()); if (!ProxyBean.class.isAssignableFrom(bean.getBeanClass())) { if (null == ReflectClass.of(bean.getBeanClass()).getConstructor(bean.getType())) { throw new BeanDefinitionException("Bean proxy class'" + bean.getBeanClass() + "' must be sub-class of '" + ProxyBean.class + "' or has a constructor with the parameter type '" + bean.getType() +
@SuppressWarnings("unchecked") protected Object doBeanCreationByConstructor(BeanDefinitionBase bd){ Class<?> beanClass = bd.getBeanClass(); Object bean = null;