@Test public void testObjectFactoryQualifierInjection() { bf.registerBeanDefinition("annotatedBean", new RootBeanDefinition(ObjectFactoryQualifierInjectionBean.class)); RootBeanDefinition bd = new RootBeanDefinition(TestBean.class); bd.addQualifier(new AutowireCandidateQualifier(Qualifier.class, "testBean")); bf.registerBeanDefinition("dependencyBean", bd); bf.registerBeanDefinition("dependencyBean2", new RootBeanDefinition(TestBean.class)); ObjectFactoryQualifierInjectionBean bean = (ObjectFactoryQualifierInjectionBean) bf.getBean("annotatedBean"); assertSame(bf.getBean("dependencyBean"), bean.getTestBean()); }
@Test public void autowiredFieldResolvesWithMultipleQualifierValuesAndExplicitDefaultValue() { GenericApplicationContext context = new GenericApplicationContext(); ConstructorArgumentValues cavs1 = new ConstructorArgumentValues(); cavs1.addGenericArgumentValue(JUERGEN); RootBeanDefinition person1 = new RootBeanDefinition(Person.class, cavs1, null); AutowireCandidateQualifier qualifier = new AutowireCandidateQualifier(TestQualifierWithMultipleAttributes.class); qualifier.setAttribute("number", 456); person1.addQualifier(qualifier); ConstructorArgumentValues cavs2 = new ConstructorArgumentValues(); cavs2.addGenericArgumentValue(MARK); RootBeanDefinition person2 = new RootBeanDefinition(Person.class, cavs2, null); AutowireCandidateQualifier qualifier2 = new AutowireCandidateQualifier(TestQualifierWithMultipleAttributes.class); qualifier2.setAttribute("number", 123); qualifier2.setAttribute("value", "default"); person2.addQualifier(qualifier2); context.registerBeanDefinition(JUERGEN, person1); context.registerBeanDefinition(MARK, person2); context.registerBeanDefinition("autowired", new RootBeanDefinition(QualifiedFieldWithMultipleAttributesTestBean.class)); AnnotationConfigUtils.registerAnnotationConfigProcessors(context); context.refresh(); QualifiedFieldWithMultipleAttributesTestBean bean = (QualifiedFieldWithMultipleAttributesTestBean) context.getBean("autowired"); assertEquals(MARK, bean.getPerson().getName()); }
AutowireCandidateQualifier candidate = abd.getQualifier(Qualifier.class.getName()); if (candidate != null) { Object value = candidate.getAttribute(AutowireCandidateQualifier.VALUE_KEY); if (value != null && qualifier.test(value.toString())) { return true;
AutowireCandidateQualifier qualifier = new AutowireCandidateQualifier(typeName); qualifier.setSource(extractSource(ele)); String value = ele.getAttribute(VALUE_ATTRIBUTE); if (StringUtils.hasLength(value)) { qualifier.setAttribute(AutowireCandidateQualifier.VALUE_KEY, value); BeanMetadataAttribute attribute = new BeanMetadataAttribute(attributeName, attributeValue); attribute.setSource(extractSource(attributeEle)); qualifier.addMetadataAttribute(attribute);
AutowireCandidateQualifier md = new AutowireCandidateQualifier(annotationType.getName()); for (Method method : annotationType.getMethods()) { if (method.getParameterTypes().length == 0 && method.getDeclaringClass() != Object.class) { String attrName = method.getName(); Object attrValue = method.invoke(annotation); md.addMetadataAttribute(new BeanMetadataAttribute(attrName, attrValue));
private void qualifiers() { @SuppressWarnings("unchecked") Set<AutowireCandidateQualifier> qualifiers = bd.getQualifiers(); for (AutowireCandidateQualifier q : qualifiers) { Element qualifierElement = beanElement.newSubElement("qualifier"); if (q.getTypeName() != null) { qualifierElement.addAttribute("type", new ClassValue(q.getTypeName())); } if (q.getAttribute("value") != null) { qualifierElement.addAttribute("value", String.valueOf(q.getAttribute("value"))); } for (String attrName : q.attributeNames()) { if (!"value".equals(attrName)) { Element attrElement = qualifierElement.newSubElement("attribute"); attrElement.addAttribute("key", String.valueOf(attrName)); attrElement.addAttribute("value", String.valueOf(q.getAttribute(attrName))); } } } }
/** * Construct a qualifier to match against an annotation of the * given type name whose {@code value} attribute also matches * the specified value. * <p>The type name may match the fully-qualified class name of * the annotation or the short class name (without the package). * @param typeName the name of the annotation type * @param value the annotation value to match */ public AutowireCandidateQualifier(String typeName, Object value) { Assert.notNull(typeName, "Type name must not be null"); this.typeName = typeName; setAttribute(VALUE_KEY, value); }
/** * Register a qualifier to be used for autowire candidate resolution, * keyed by the qualifier's type name. * @see AutowireCandidateQualifier#getTypeName() */ public void addQualifier(AutowireCandidateQualifier qualifier) { this.qualifiers.put(qualifier.getTypeName(), qualifier); }
valueHolder.setName(nameAttr); valueHolder.setSource(extractSource(ele)); bd.getConstructorArgumentValues().addGenericArgumentValue(valueHolder);
AutowireCandidateQualifier qualifier = new AutowireCandidateQualifier(typeName); qualifier.setSource(extractSource(ele)); String value = ele.getAttribute(VALUE_ATTRIBUTE); if (StringUtils.hasLength(value)) { qualifier.setAttribute(AutowireCandidateQualifier.VALUE_KEY, value); BeanMetadataAttribute attribute = new BeanMetadataAttribute(attributeName, attributeValue); attribute.setSource(extractSource(attributeEle)); qualifier.addMetadataAttribute(attribute);
AutowireCandidateQualifier md = new AutowireCandidateQualifier(annotationType.getName()); for (Method method : annotationType.getMethods()) { if (method.getParameterTypes().length == 0 && method.getDeclaringClass() != Object.class) { String attrName = method.getName(); Object attrValue = method.invoke(annotation); md.addMetadataAttribute(new BeanMetadataAttribute(attrName, attrValue));
private void qualifiers() { @SuppressWarnings("unchecked") Set<AutowireCandidateQualifier> qualifiers = bd.getQualifiers(); for (AutowireCandidateQualifier q : qualifiers) { Element qualifierElement = beanElement.newSubElement("qualifier"); if (q.getTypeName() != null) { qualifierElement.addAttribute("type", new ClassValue(q.getTypeName())); } if (q.getAttribute("value") != null) { qualifierElement.addAttribute("value", String.valueOf(q.getAttribute("value"))); } for (String attrName : q.attributeNames()) { if (!"value".equals(attrName)) { Element attrElement = qualifierElement.newSubElement("attribute"); attrElement.addAttribute("key", String.valueOf(attrName)); attrElement.addAttribute("value", String.valueOf(q.getAttribute(attrName))); } } } }
/** * Construct a qualifier to match against an annotation of the * given type name whose {@code value} attribute also matches * the specified value. * <p>The type name may match the fully-qualified class name of * the annotation or the short class name (without the package). * @param typeName the name of the annotation type * @param value the annotation value to match */ public AutowireCandidateQualifier(String typeName, Object value) { Assert.notNull(typeName, "Type name must not be null"); this.typeName = typeName; setAttribute(VALUE_KEY, value); }
/** * Register a qualifier to be used for autowire candidate resolution, * keyed by the qualifier's type name. * @see AutowireCandidateQualifier#getTypeName() */ public void addQualifier(AutowireCandidateQualifier qualifier) { this.qualifiers.put(qualifier.getTypeName(), qualifier); }
@Test public void testObjectFactoryInjection() { bf.registerBeanDefinition("annotatedBean", new RootBeanDefinition(ObjectFactoryQualifierFieldInjectionBean.class)); RootBeanDefinition bd = new RootBeanDefinition(TestBean.class); bd.addQualifier(new AutowireCandidateQualifier(Qualifier.class, "testBean")); bf.registerBeanDefinition("testBean", bd); bf.registerBeanDefinition("testBean2", new RootBeanDefinition(TestBean.class)); ObjectFactoryQualifierFieldInjectionBean bean = (ObjectFactoryQualifierFieldInjectionBean) bf.getBean("annotatedBean"); assertSame(bf.getBean("testBean"), bean.getTestBean()); }
@Test public void testAutowiredFieldResolvesWithMultipleQualifierValuesAndExplicitDefaultValue() { GenericApplicationContext context = new GenericApplicationContext(); ConstructorArgumentValues cavs1 = new ConstructorArgumentValues(); cavs1.addGenericArgumentValue(JUERGEN); RootBeanDefinition person1 = new RootBeanDefinition(Person.class, cavs1, null); AutowireCandidateQualifier qualifier = new AutowireCandidateQualifier(TestQualifierWithMultipleAttributes.class); qualifier.setAttribute("number", 456); person1.addQualifier(qualifier); ConstructorArgumentValues cavs2 = new ConstructorArgumentValues(); cavs2.addGenericArgumentValue(MARK); RootBeanDefinition person2 = new RootBeanDefinition(Person.class, cavs2, null); AutowireCandidateQualifier qualifier2 = new AutowireCandidateQualifier(TestQualifierWithMultipleAttributes.class); qualifier2.setAttribute("number", 123); qualifier2.setAttribute("value", "default"); person2.addQualifier(qualifier2); context.registerBeanDefinition(JUERGEN, person1); context.registerBeanDefinition(MARK, person2); context.registerBeanDefinition("autowired", new RootBeanDefinition(QualifiedFieldWithMultipleAttributesTestBean.class)); AnnotationConfigUtils.registerAnnotationConfigProcessors(context); context.refresh(); QualifiedFieldWithMultipleAttributesTestBean bean = (QualifiedFieldWithMultipleAttributesTestBean) context.getBean("autowired"); assertEquals(MARK, bean.getPerson().getName()); }
AutowireCandidateQualifier qualifier = new AutowireCandidateQualifier(typeName); qualifier.setSource(extractSource(ele)); String value = ele.getAttribute(VALUE_ATTRIBUTE); if (StringUtils.hasLength(value)) { qualifier.setAttribute(AutowireCandidateQualifier.VALUE_KEY, value); BeanMetadataAttribute attribute = new BeanMetadataAttribute(attributeName, attributeValue); attribute.setSource(extractSource(attributeEle)); qualifier.addMetadataAttribute(attribute);
@Override protected void registerBeans(InjectLock annotation, ResolvableType targetType, BeanDefinitionRegistry registry) { String name = LockBean.class.getName() + "-" + annotation.name() + "--" + annotation.name(); if (!registry.containsBeanDefinition(name)) { AbstractBeanDefinition def = BeanDefinitionBuilder.rootBeanDefinition(LockBean.class) .setLazyInit(true) .addPropertyValue("region", annotation.region()) .addPropertyValue("name", annotation.name()) .getBeanDefinition(); AutowireCandidateQualifier qualifier = new AutowireCandidateQualifier(annotation.annotationType()); qualifier.addMetadataAttribute(new BeanMetadataAttribute("region", annotation.region())); qualifier.addMetadataAttribute(new BeanMetadataAttribute("name", annotation.name())); def.addQualifier(qualifier); registry.registerBeanDefinition(name, def); } } }
private void qualifiers() { @SuppressWarnings("unchecked") Set<AutowireCandidateQualifier> qualifiers = bd.getQualifiers(); for (AutowireCandidateQualifier q : qualifiers) { Element qualifierElement = beanElement.newSubElement("qualifier"); if (q.getTypeName() != null) { qualifierElement.addAttribute("type", new ClassValue(q.getTypeName())); } if (q.getAttribute("value") != null) { qualifierElement.addAttribute("value", String.valueOf(q.getAttribute("value"))); } for (String attrName : q.attributeNames()) { if (!"value".equals(attrName)) { Element attrElement = qualifierElement.newSubElement("attribute"); attrElement.addAttribute("key", String.valueOf(attrName)); attrElement.addAttribute("value", String.valueOf(q.getAttribute(attrName))); } } } }
AutowireCandidateQualifier candidate = abd.getQualifier(Qualifier.class.getName()); if (candidate != null) { Object value = candidate.getAttribute(AutowireCandidateQualifier.VALUE_KEY); if (value != null && qualifier.test(value.toString())) { return true;