moving unit tests from .testsuite -> .beans
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
/*
|
||||
* Copyright 2002-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.beans.factory.serviceloader;
|
||||
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.ServiceLoader;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
|
||||
import org.springframework.beans.factory.support.RootBeanDefinition;
|
||||
import org.springframework.core.JdkVersion;
|
||||
|
||||
/**
|
||||
* @author Juergen Hoeller
|
||||
* @author Chris Beams
|
||||
*/
|
||||
public class ServiceLoaderTests {
|
||||
|
||||
@Test
|
||||
public void testServiceLoaderFactoryBean() {
|
||||
if (JdkVersion.getMajorJavaVersion() < JdkVersion.JAVA_16 ||
|
||||
!ServiceLoader.load(DocumentBuilderFactory.class).iterator().hasNext()){
|
||||
return;
|
||||
}
|
||||
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||
RootBeanDefinition bd = new RootBeanDefinition(ServiceLoaderFactoryBean.class);
|
||||
bd.getPropertyValues().addPropertyValue("serviceType", DocumentBuilderFactory.class.getName());
|
||||
bf.registerBeanDefinition("service", bd);
|
||||
ServiceLoader<?> serviceLoader = (ServiceLoader<?>) bf.getBean("service");
|
||||
assertTrue(serviceLoader.iterator().next() instanceof DocumentBuilderFactory);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testServiceFactoryBean() {
|
||||
if (JdkVersion.getMajorJavaVersion() < JdkVersion.JAVA_16 ||
|
||||
!ServiceLoader.load(DocumentBuilderFactory.class).iterator().hasNext()){
|
||||
return;
|
||||
}
|
||||
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||
RootBeanDefinition bd = new RootBeanDefinition(ServiceFactoryBean.class);
|
||||
bd.getPropertyValues().addPropertyValue("serviceType", DocumentBuilderFactory.class.getName());
|
||||
bf.registerBeanDefinition("service", bd);
|
||||
assertTrue(bf.getBean("service") instanceof DocumentBuilderFactory);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testServiceListFactoryBean() {
|
||||
if (JdkVersion.getMajorJavaVersion() < JdkVersion.JAVA_16 ||
|
||||
!ServiceLoader.load(DocumentBuilderFactory.class).iterator().hasNext()){
|
||||
return;
|
||||
}
|
||||
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||
RootBeanDefinition bd = new RootBeanDefinition(ServiceListFactoryBean.class);
|
||||
bd.getPropertyValues().addPropertyValue("serviceType", DocumentBuilderFactory.class.getName());
|
||||
bf.registerBeanDefinition("service", bd);
|
||||
List<?> serviceList = (List<?>) bf.getBean("service");
|
||||
assertTrue(serviceList.get(0) instanceof DocumentBuilderFactory);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,644 @@
|
||||
/*
|
||||
* Copyright 2002-2008 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.beans.factory.support;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URI;
|
||||
import java.net.URL;
|
||||
import java.util.AbstractCollection;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.springframework.beans.GenericBean;
|
||||
import org.springframework.beans.GenericIntegerBean;
|
||||
import org.springframework.beans.GenericSetOfIntegerBean;
|
||||
import org.springframework.beans.PropertyEditorRegistrar;
|
||||
import org.springframework.beans.PropertyEditorRegistry;
|
||||
import org.springframework.beans.factory.xml.XmlBeanFactory;
|
||||
import org.springframework.beans.propertyeditors.CustomNumberEditor;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.core.io.UrlResource;
|
||||
|
||||
/**
|
||||
* @author Juergen Hoeller
|
||||
* @author Chris Beams
|
||||
* @since 20.01.2006
|
||||
*/
|
||||
public class BeanFactoryGenericsTests {
|
||||
|
||||
@Test
|
||||
public void testGenericSetProperty() {
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||
RootBeanDefinition rbd = new RootBeanDefinition(GenericBean.class);
|
||||
|
||||
Set<String> input = new HashSet<String>();
|
||||
input.add("4");
|
||||
input.add("5");
|
||||
rbd.getPropertyValues().addPropertyValue("integerSet", input);
|
||||
|
||||
bf.registerBeanDefinition("genericBean", rbd);
|
||||
GenericBean<?> gb = (GenericBean<?>) bf.getBean("genericBean");
|
||||
|
||||
assertTrue(gb.getIntegerSet().contains(new Integer(4)));
|
||||
assertTrue(gb.getIntegerSet().contains(new Integer(5)));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenericListProperty() throws MalformedURLException {
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||
RootBeanDefinition rbd = new RootBeanDefinition(GenericBean.class);
|
||||
|
||||
List<String> input = new ArrayList<String>();
|
||||
input.add("http://localhost:8080");
|
||||
input.add("http://localhost:9090");
|
||||
rbd.getPropertyValues().addPropertyValue("resourceList", input);
|
||||
|
||||
bf.registerBeanDefinition("genericBean", rbd);
|
||||
GenericBean<?> gb = (GenericBean<?>) bf.getBean("genericBean");
|
||||
|
||||
assertEquals(new UrlResource("http://localhost:8080"), gb.getResourceList().get(0));
|
||||
assertEquals(new UrlResource("http://localhost:9090"), gb.getResourceList().get(1));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenericListPropertyWithAutowiring() throws MalformedURLException {
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||
bf.registerSingleton("resource1", new UrlResource("http://localhost:8080"));
|
||||
bf.registerSingleton("resource2", new UrlResource("http://localhost:9090"));
|
||||
|
||||
RootBeanDefinition rbd = new RootBeanDefinition(GenericIntegerBean.class, RootBeanDefinition.AUTOWIRE_BY_TYPE);
|
||||
bf.registerBeanDefinition("genericBean", rbd);
|
||||
GenericIntegerBean gb = (GenericIntegerBean) bf.getBean("genericBean");
|
||||
|
||||
assertEquals(new UrlResource("http://localhost:8080"), gb.getResourceList().get(0));
|
||||
assertEquals(new UrlResource("http://localhost:9090"), gb.getResourceList().get(1));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenericListPropertyWithOptionalAutowiring() throws MalformedURLException {
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||
|
||||
RootBeanDefinition rbd = new RootBeanDefinition(GenericBean.class, RootBeanDefinition.AUTOWIRE_BY_TYPE);
|
||||
bf.registerBeanDefinition("genericBean", rbd);
|
||||
GenericBean<?> gb = (GenericBean<?>) bf.getBean("genericBean");
|
||||
|
||||
assertNull(gb.getResourceList());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenericMapProperty() {
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||
RootBeanDefinition rbd = new RootBeanDefinition(GenericBean.class);
|
||||
|
||||
Map<String, String> input = new HashMap<String, String>();
|
||||
input.put("4", "5");
|
||||
input.put("6", "7");
|
||||
rbd.getPropertyValues().addPropertyValue("shortMap", input);
|
||||
|
||||
bf.registerBeanDefinition("genericBean", rbd);
|
||||
GenericBean<?> gb = (GenericBean<?>) bf.getBean("genericBean");
|
||||
|
||||
assertEquals(new Integer(5), gb.getShortMap().get(new Short("4")));
|
||||
assertEquals(new Integer(7), gb.getShortMap().get(new Short("6")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenericListOfArraysProperty() throws MalformedURLException {
|
||||
XmlBeanFactory bf = new XmlBeanFactory(new ClassPathResource("genericBeanTests.xml", getClass()));
|
||||
GenericBean<?> gb = (GenericBean<?>) bf.getBean("listOfArrays");
|
||||
|
||||
assertEquals(1, gb.getListOfArrays().size());
|
||||
String[] array = gb.getListOfArrays().get(0);
|
||||
assertEquals(2, array.length);
|
||||
assertEquals("value1", array[0]);
|
||||
assertEquals("value2", array[1]);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testGenericSetConstructor() {
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||
RootBeanDefinition rbd = new RootBeanDefinition(GenericBean.class);
|
||||
|
||||
Set<String> input = new HashSet<String>();
|
||||
input.add("4");
|
||||
input.add("5");
|
||||
rbd.getConstructorArgumentValues().addGenericArgumentValue(input);
|
||||
|
||||
bf.registerBeanDefinition("genericBean", rbd);
|
||||
GenericBean<?> gb = (GenericBean<?>) bf.getBean("genericBean");
|
||||
|
||||
assertTrue(gb.getIntegerSet().contains(new Integer(4)));
|
||||
assertTrue(gb.getIntegerSet().contains(new Integer(5)));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenericSetConstructorWithAutowiring() {
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||
bf.registerSingleton("integer1", new Integer(4));
|
||||
bf.registerSingleton("integer2", new Integer(5));
|
||||
|
||||
RootBeanDefinition rbd = new RootBeanDefinition(GenericBean.class, RootBeanDefinition.AUTOWIRE_CONSTRUCTOR);
|
||||
bf.registerBeanDefinition("genericBean", rbd);
|
||||
GenericBean<?> gb = (GenericBean<?>) bf.getBean("genericBean");
|
||||
|
||||
assertTrue(gb.getIntegerSet().contains(new Integer(4)));
|
||||
assertTrue(gb.getIntegerSet().contains(new Integer(5)));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenericSetConstructorWithOptionalAutowiring() {
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||
|
||||
RootBeanDefinition rbd = new RootBeanDefinition(GenericBean.class, RootBeanDefinition.AUTOWIRE_CONSTRUCTOR);
|
||||
bf.registerBeanDefinition("genericBean", rbd);
|
||||
GenericBean<?> gb = (GenericBean<?>) bf.getBean("genericBean");
|
||||
|
||||
assertNull(gb.getIntegerSet());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenericSetListConstructor() throws MalformedURLException {
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||
RootBeanDefinition rbd = new RootBeanDefinition(GenericBean.class);
|
||||
|
||||
Set<String> input = new HashSet<String>();
|
||||
input.add("4");
|
||||
input.add("5");
|
||||
List<String> input2 = new ArrayList<String>();
|
||||
input2.add("http://localhost:8080");
|
||||
input2.add("http://localhost:9090");
|
||||
rbd.getConstructorArgumentValues().addGenericArgumentValue(input);
|
||||
rbd.getConstructorArgumentValues().addGenericArgumentValue(input2);
|
||||
|
||||
bf.registerBeanDefinition("genericBean", rbd);
|
||||
GenericBean<?> gb = (GenericBean<?>) bf.getBean("genericBean");
|
||||
|
||||
assertTrue(gb.getIntegerSet().contains(new Integer(4)));
|
||||
assertTrue(gb.getIntegerSet().contains(new Integer(5)));
|
||||
assertEquals(new UrlResource("http://localhost:8080"), gb.getResourceList().get(0));
|
||||
assertEquals(new UrlResource("http://localhost:9090"), gb.getResourceList().get(1));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenericSetListConstructorWithAutowiring() throws MalformedURLException {
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||
bf.registerSingleton("integer1", new Integer(4));
|
||||
bf.registerSingleton("integer2", new Integer(5));
|
||||
bf.registerSingleton("resource1", new UrlResource("http://localhost:8080"));
|
||||
bf.registerSingleton("resource2", new UrlResource("http://localhost:9090"));
|
||||
|
||||
RootBeanDefinition rbd = new RootBeanDefinition(GenericBean.class, RootBeanDefinition.AUTOWIRE_CONSTRUCTOR);
|
||||
bf.registerBeanDefinition("genericBean", rbd);
|
||||
GenericBean<?> gb = (GenericBean<?>) bf.getBean("genericBean");
|
||||
|
||||
assertTrue(gb.getIntegerSet().contains(new Integer(4)));
|
||||
assertTrue(gb.getIntegerSet().contains(new Integer(5)));
|
||||
assertEquals(new UrlResource("http://localhost:8080"), gb.getResourceList().get(0));
|
||||
assertEquals(new UrlResource("http://localhost:9090"), gb.getResourceList().get(1));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenericSetListConstructorWithOptionalAutowiring() throws MalformedURLException {
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||
bf.registerSingleton("resource1", new UrlResource("http://localhost:8080"));
|
||||
bf.registerSingleton("resource2", new UrlResource("http://localhost:9090"));
|
||||
|
||||
RootBeanDefinition rbd = new RootBeanDefinition(GenericBean.class, RootBeanDefinition.AUTOWIRE_CONSTRUCTOR);
|
||||
bf.registerBeanDefinition("genericBean", rbd);
|
||||
GenericBean<?> gb = (GenericBean<?>) bf.getBean("genericBean");
|
||||
|
||||
assertNull(gb.getIntegerSet());
|
||||
assertNull(gb.getResourceList());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenericSetMapConstructor() throws MalformedURLException {
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||
RootBeanDefinition rbd = new RootBeanDefinition(GenericBean.class);
|
||||
|
||||
Set<String> input = new HashSet<String>();
|
||||
input.add("4");
|
||||
input.add("5");
|
||||
Map<String, String> input2 = new HashMap<String, String>();
|
||||
input2.put("4", "5");
|
||||
input2.put("6", "7");
|
||||
rbd.getConstructorArgumentValues().addGenericArgumentValue(input);
|
||||
rbd.getConstructorArgumentValues().addGenericArgumentValue(input2);
|
||||
|
||||
bf.registerBeanDefinition("genericBean", rbd);
|
||||
GenericBean<?> gb = (GenericBean<?>) bf.getBean("genericBean");
|
||||
|
||||
assertTrue(gb.getIntegerSet().contains(new Integer(4)));
|
||||
assertTrue(gb.getIntegerSet().contains(new Integer(5)));
|
||||
assertEquals(new Integer(5), gb.getShortMap().get(new Short("4")));
|
||||
assertEquals(new Integer(7), gb.getShortMap().get(new Short("6")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenericMapResourceConstructor() throws MalformedURLException {
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||
RootBeanDefinition rbd = new RootBeanDefinition(GenericBean.class);
|
||||
|
||||
Map<String, String> input = new HashMap<String, String>();
|
||||
input.put("4", "5");
|
||||
input.put("6", "7");
|
||||
rbd.getConstructorArgumentValues().addGenericArgumentValue(input);
|
||||
rbd.getConstructorArgumentValues().addGenericArgumentValue("http://localhost:8080");
|
||||
|
||||
bf.registerBeanDefinition("genericBean", rbd);
|
||||
GenericBean<?> gb = (GenericBean<?>) bf.getBean("genericBean");
|
||||
|
||||
assertEquals(new Integer(5), gb.getShortMap().get(new Short("4")));
|
||||
assertEquals(new Integer(7), gb.getShortMap().get(new Short("6")));
|
||||
assertEquals(new UrlResource("http://localhost:8080"), gb.getResourceList().get(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenericMapMapConstructor() throws MalformedURLException {
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||
RootBeanDefinition rbd = new RootBeanDefinition(GenericBean.class);
|
||||
|
||||
Map<String, String> input = new HashMap<String, String>();
|
||||
input.put("1", "0");
|
||||
input.put("2", "3");
|
||||
Map<String, String> input2 = new HashMap<String, String>();
|
||||
input2.put("4", "5");
|
||||
input2.put("6", "7");
|
||||
rbd.getConstructorArgumentValues().addGenericArgumentValue(input);
|
||||
rbd.getConstructorArgumentValues().addGenericArgumentValue(input2);
|
||||
|
||||
bf.registerBeanDefinition("genericBean", rbd);
|
||||
GenericBean<?> gb = (GenericBean<?>) bf.getBean("genericBean");
|
||||
|
||||
assertNotSame(gb.getPlainMap(), gb.getShortMap());
|
||||
assertEquals(2, gb.getPlainMap().size());
|
||||
assertEquals("0", gb.getPlainMap().get("1"));
|
||||
assertEquals("3", gb.getPlainMap().get("2"));
|
||||
assertEquals(2, gb.getShortMap().size());
|
||||
assertEquals(new Integer(5), gb.getShortMap().get(new Short("4")));
|
||||
assertEquals(new Integer(7), gb.getShortMap().get(new Short("6")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenericMapMapConstructorWithSameRefAndConversion() throws MalformedURLException {
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||
RootBeanDefinition rbd = new RootBeanDefinition(GenericBean.class);
|
||||
|
||||
Map<String, String> input = new HashMap<String, String>();
|
||||
input.put("1", "0");
|
||||
input.put("2", "3");
|
||||
rbd.getConstructorArgumentValues().addGenericArgumentValue(input);
|
||||
rbd.getConstructorArgumentValues().addGenericArgumentValue(input);
|
||||
|
||||
bf.registerBeanDefinition("genericBean", rbd);
|
||||
GenericBean<?> gb = (GenericBean<?>) bf.getBean("genericBean");
|
||||
|
||||
assertNotSame(gb.getPlainMap(), gb.getShortMap());
|
||||
assertEquals(2, gb.getPlainMap().size());
|
||||
assertEquals("0", gb.getPlainMap().get("1"));
|
||||
assertEquals("3", gb.getPlainMap().get("2"));
|
||||
assertEquals(2, gb.getShortMap().size());
|
||||
assertEquals(new Integer(0), gb.getShortMap().get(new Short("1")));
|
||||
assertEquals(new Integer(3), gb.getShortMap().get(new Short("2")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenericMapMapConstructorWithSameRefAndNoConversion() throws MalformedURLException {
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||
RootBeanDefinition rbd = new RootBeanDefinition(GenericBean.class);
|
||||
|
||||
Map<Short, Integer> input = new HashMap<Short, Integer>();
|
||||
input.put(new Short((short) 1), new Integer(0));
|
||||
input.put(new Short((short) 2), new Integer(3));
|
||||
rbd.getConstructorArgumentValues().addGenericArgumentValue(input);
|
||||
rbd.getConstructorArgumentValues().addGenericArgumentValue(input);
|
||||
|
||||
bf.registerBeanDefinition("genericBean", rbd);
|
||||
GenericBean<?> gb = (GenericBean<?>) bf.getBean("genericBean");
|
||||
|
||||
assertSame(gb.getPlainMap(), gb.getShortMap());
|
||||
assertEquals(2, gb.getShortMap().size());
|
||||
assertEquals(new Integer(0), gb.getShortMap().get(new Short("1")));
|
||||
assertEquals(new Integer(3), gb.getShortMap().get(new Short("2")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenericMapWithKeyTypeConstructor() throws MalformedURLException {
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||
RootBeanDefinition rbd = new RootBeanDefinition(GenericBean.class);
|
||||
|
||||
Map<String, String> input = new HashMap<String, String>();
|
||||
input.put("4", "5");
|
||||
input.put("6", "7");
|
||||
rbd.getConstructorArgumentValues().addGenericArgumentValue(input);
|
||||
|
||||
bf.registerBeanDefinition("genericBean", rbd);
|
||||
GenericBean<?> gb = (GenericBean<?>) bf.getBean("genericBean");
|
||||
|
||||
assertEquals("5", gb.getLongMap().get(new Long("4")));
|
||||
assertEquals("7", gb.getLongMap().get(new Long("6")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenericMapWithCollectionValueConstructor() throws MalformedURLException {
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||
bf.addPropertyEditorRegistrar(new PropertyEditorRegistrar() {
|
||||
public void registerCustomEditors(PropertyEditorRegistry registry) {
|
||||
registry.registerCustomEditor(Number.class, new CustomNumberEditor(Integer.class, false));
|
||||
}
|
||||
});
|
||||
RootBeanDefinition rbd = new RootBeanDefinition(GenericBean.class);
|
||||
|
||||
Map<String, AbstractCollection<?>> input = new HashMap<String, AbstractCollection<?>>();
|
||||
HashSet<Integer> value1 = new HashSet<Integer>();
|
||||
value1.add(new Integer(1));
|
||||
input.put("1", value1);
|
||||
ArrayList<Boolean> value2 = new ArrayList<Boolean>();
|
||||
value2.add(Boolean.TRUE);
|
||||
input.put("2", value2);
|
||||
rbd.getConstructorArgumentValues().addGenericArgumentValue(Boolean.TRUE);
|
||||
rbd.getConstructorArgumentValues().addGenericArgumentValue(input);
|
||||
|
||||
bf.registerBeanDefinition("genericBean", rbd);
|
||||
GenericBean<?> gb = (GenericBean<?>) bf.getBean("genericBean");
|
||||
|
||||
assertTrue(gb.getCollectionMap().get(new Integer(1)) instanceof HashSet);
|
||||
assertTrue(gb.getCollectionMap().get(new Integer(2)) instanceof ArrayList);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testGenericSetFactoryMethod() {
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||
RootBeanDefinition rbd = new RootBeanDefinition(GenericBean.class);
|
||||
rbd.setFactoryMethodName("createInstance");
|
||||
|
||||
Set<String> input = new HashSet<String>();
|
||||
input.add("4");
|
||||
input.add("5");
|
||||
rbd.getConstructorArgumentValues().addGenericArgumentValue(input);
|
||||
|
||||
bf.registerBeanDefinition("genericBean", rbd);
|
||||
GenericBean<?> gb = (GenericBean<?>) bf.getBean("genericBean");
|
||||
|
||||
assertTrue(gb.getIntegerSet().contains(new Integer(4)));
|
||||
assertTrue(gb.getIntegerSet().contains(new Integer(5)));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenericSetListFactoryMethod() throws MalformedURLException {
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||
RootBeanDefinition rbd = new RootBeanDefinition(GenericBean.class);
|
||||
rbd.setFactoryMethodName("createInstance");
|
||||
|
||||
Set<String> input = new HashSet<String>();
|
||||
input.add("4");
|
||||
input.add("5");
|
||||
List<String> input2 = new ArrayList<String>();
|
||||
input2.add("http://localhost:8080");
|
||||
input2.add("http://localhost:9090");
|
||||
rbd.getConstructorArgumentValues().addGenericArgumentValue(input);
|
||||
rbd.getConstructorArgumentValues().addGenericArgumentValue(input2);
|
||||
|
||||
bf.registerBeanDefinition("genericBean", rbd);
|
||||
GenericBean<?> gb = (GenericBean<?>) bf.getBean("genericBean");
|
||||
|
||||
assertTrue(gb.getIntegerSet().contains(new Integer(4)));
|
||||
assertTrue(gb.getIntegerSet().contains(new Integer(5)));
|
||||
assertEquals(new UrlResource("http://localhost:8080"), gb.getResourceList().get(0));
|
||||
assertEquals(new UrlResource("http://localhost:9090"), gb.getResourceList().get(1));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenericSetMapFactoryMethod() throws MalformedURLException {
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||
RootBeanDefinition rbd = new RootBeanDefinition(GenericBean.class);
|
||||
rbd.setFactoryMethodName("createInstance");
|
||||
|
||||
Set<String> input = new HashSet<String>();
|
||||
input.add("4");
|
||||
input.add("5");
|
||||
Map<String, String> input2 = new HashMap<String, String>();
|
||||
input2.put("4", "5");
|
||||
input2.put("6", "7");
|
||||
rbd.getConstructorArgumentValues().addGenericArgumentValue(input);
|
||||
rbd.getConstructorArgumentValues().addGenericArgumentValue(input2);
|
||||
|
||||
bf.registerBeanDefinition("genericBean", rbd);
|
||||
GenericBean<?> gb = (GenericBean<?>) bf.getBean("genericBean");
|
||||
|
||||
assertTrue(gb.getIntegerSet().contains(new Integer(4)));
|
||||
assertTrue(gb.getIntegerSet().contains(new Integer(5)));
|
||||
assertEquals(new Integer(5), gb.getShortMap().get(new Short("4")));
|
||||
assertEquals(new Integer(7), gb.getShortMap().get(new Short("6")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenericMapResourceFactoryMethod() throws MalformedURLException {
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||
RootBeanDefinition rbd = new RootBeanDefinition(GenericBean.class);
|
||||
rbd.setFactoryMethodName("createInstance");
|
||||
|
||||
Map<String, String> input = new HashMap<String, String>();
|
||||
input.put("4", "5");
|
||||
input.put("6", "7");
|
||||
rbd.getConstructorArgumentValues().addGenericArgumentValue(input);
|
||||
rbd.getConstructorArgumentValues().addGenericArgumentValue("http://localhost:8080");
|
||||
|
||||
bf.registerBeanDefinition("genericBean", rbd);
|
||||
GenericBean<?> gb = (GenericBean<?>) bf.getBean("genericBean");
|
||||
|
||||
assertEquals(new Integer(5), gb.getShortMap().get(new Short("4")));
|
||||
assertEquals(new Integer(7), gb.getShortMap().get(new Short("6")));
|
||||
assertEquals(new UrlResource("http://localhost:8080"), gb.getResourceList().get(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenericMapMapFactoryMethod() throws MalformedURLException {
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||
RootBeanDefinition rbd = new RootBeanDefinition(GenericBean.class);
|
||||
rbd.setFactoryMethodName("createInstance");
|
||||
|
||||
Map<String, String> input = new HashMap<String, String>();
|
||||
input.put("1", "0");
|
||||
input.put("2", "3");
|
||||
Map<String, String> input2 = new HashMap<String, String>();
|
||||
input2.put("4", "5");
|
||||
input2.put("6", "7");
|
||||
rbd.getConstructorArgumentValues().addGenericArgumentValue(input);
|
||||
rbd.getConstructorArgumentValues().addGenericArgumentValue(input2);
|
||||
|
||||
bf.registerBeanDefinition("genericBean", rbd);
|
||||
GenericBean<?> gb = (GenericBean<?>) bf.getBean("genericBean");
|
||||
|
||||
assertEquals("0", gb.getPlainMap().get("1"));
|
||||
assertEquals("3", gb.getPlainMap().get("2"));
|
||||
assertEquals(new Integer(5), gb.getShortMap().get(new Short("4")));
|
||||
assertEquals(new Integer(7), gb.getShortMap().get(new Short("6")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenericMapWithKeyTypeFactoryMethod() throws MalformedURLException {
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||
RootBeanDefinition rbd = new RootBeanDefinition(GenericBean.class);
|
||||
rbd.setFactoryMethodName("createInstance");
|
||||
|
||||
Map<String, String> input = new HashMap<String, String>();
|
||||
input.put("4", "5");
|
||||
input.put("6", "7");
|
||||
rbd.getConstructorArgumentValues().addGenericArgumentValue(input);
|
||||
|
||||
bf.registerBeanDefinition("genericBean", rbd);
|
||||
GenericBean<?> gb = (GenericBean<?>) bf.getBean("genericBean");
|
||||
|
||||
assertEquals("5", gb.getLongMap().get(new Long("4")));
|
||||
assertEquals("7", gb.getLongMap().get(new Long("6")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenericMapWithCollectionValueFactoryMethod() throws MalformedURLException {
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||
bf.addPropertyEditorRegistrar(new PropertyEditorRegistrar() {
|
||||
public void registerCustomEditors(PropertyEditorRegistry registry) {
|
||||
registry.registerCustomEditor(Number.class, new CustomNumberEditor(Integer.class, false));
|
||||
}
|
||||
});
|
||||
RootBeanDefinition rbd = new RootBeanDefinition(GenericBean.class);
|
||||
rbd.setFactoryMethodName("createInstance");
|
||||
|
||||
Map<String, AbstractCollection<?>> input = new HashMap<String, AbstractCollection<?>>();
|
||||
HashSet<Integer> value1 = new HashSet<Integer>();
|
||||
value1.add(new Integer(1));
|
||||
input.put("1", value1);
|
||||
ArrayList<Boolean> value2 = new ArrayList<Boolean>();
|
||||
value2.add(Boolean.TRUE);
|
||||
input.put("2", value2);
|
||||
rbd.getConstructorArgumentValues().addGenericArgumentValue(Boolean.TRUE);
|
||||
rbd.getConstructorArgumentValues().addGenericArgumentValue(input);
|
||||
|
||||
bf.registerBeanDefinition("genericBean", rbd);
|
||||
GenericBean<?> gb = (GenericBean<?>) bf.getBean("genericBean");
|
||||
|
||||
assertTrue(gb.getCollectionMap().get(new Integer(1)) instanceof HashSet);
|
||||
assertTrue(gb.getCollectionMap().get(new Integer(2)) instanceof ArrayList);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenericListBean() throws Exception {
|
||||
XmlBeanFactory bf = new XmlBeanFactory(new ClassPathResource("genericBeanTests.xml", getClass()));
|
||||
List<?> list = (List<?>) bf.getBean("list");
|
||||
assertEquals(1, list.size());
|
||||
assertEquals(new URL("http://localhost:8080"), list.get(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenericSetBean() throws Exception {
|
||||
XmlBeanFactory bf = new XmlBeanFactory(new ClassPathResource("genericBeanTests.xml", getClass()));
|
||||
Set<?> set = (Set<?>) bf.getBean("set");
|
||||
assertEquals(1, set.size());
|
||||
assertEquals(new URL("http://localhost:8080"), set.iterator().next());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenericMapBean() throws Exception {
|
||||
XmlBeanFactory bf = new XmlBeanFactory(new ClassPathResource("genericBeanTests.xml", getClass()));
|
||||
Map<?, ?> map = (Map<?, ?>) bf.getBean("map");
|
||||
assertEquals(1, map.size());
|
||||
assertEquals(new Integer(10), map.keySet().iterator().next());
|
||||
assertEquals(new URL("http://localhost:8080"), map.values().iterator().next());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenericallyTypedIntegerBean() throws Exception {
|
||||
XmlBeanFactory bf = new XmlBeanFactory(new ClassPathResource("genericBeanTests.xml", getClass()));
|
||||
GenericIntegerBean gb = (GenericIntegerBean) bf.getBean("integerBean");
|
||||
assertEquals(new Integer(10), gb.getGenericProperty());
|
||||
assertEquals(new Integer(20), gb.getGenericListProperty().get(0));
|
||||
assertEquals(new Integer(30), gb.getGenericListProperty().get(1));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenericallyTypedSetOfIntegerBean() throws Exception {
|
||||
XmlBeanFactory bf = new XmlBeanFactory(new ClassPathResource("genericBeanTests.xml", getClass()));
|
||||
GenericSetOfIntegerBean gb = (GenericSetOfIntegerBean) bf.getBean("setOfIntegerBean");
|
||||
assertEquals(new Integer(10), gb.getGenericProperty().iterator().next());
|
||||
assertEquals(new Integer(20), gb.getGenericListProperty().get(0).iterator().next());
|
||||
assertEquals(new Integer(30), gb.getGenericListProperty().get(1).iterator().next());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetBean() throws Exception {
|
||||
XmlBeanFactory bf = new XmlBeanFactory(new ClassPathResource("genericBeanTests.xml", getClass()));
|
||||
UrlSet us = (UrlSet) bf.getBean("setBean");
|
||||
assertEquals(1, us.size());
|
||||
assertEquals(new URL("http://www.springframework.org"), us.iterator().next());
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
public static class NamedUrlList extends LinkedList<URL> {
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
public static class NamedUrlSet extends HashSet<URL> {
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
public static class NamedUrlMap extends HashMap<Integer, URL> {
|
||||
}
|
||||
|
||||
|
||||
public static class CollectionDependentBean {
|
||||
|
||||
public CollectionDependentBean(NamedUrlList list, NamedUrlSet set, NamedUrlMap map) {
|
||||
assertEquals(1, list.size());
|
||||
assertEquals(1, set.size());
|
||||
assertEquals(1, map.size());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
public static class UrlSet extends HashSet<URL> {
|
||||
|
||||
public UrlSet() {
|
||||
super();
|
||||
}
|
||||
|
||||
public UrlSet(Set<? extends URL> urls) {
|
||||
super();
|
||||
}
|
||||
|
||||
public void setUrlNames(Set<URI> urlNames) throws MalformedURLException {
|
||||
for (URI urlName : urlNames) {
|
||||
add(urlName.toURL());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,249 @@
|
||||
/*
|
||||
* Copyright 2002-2008 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.beans.factory.support;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.beans.factory.config.ConstructorArgumentValues;
|
||||
import org.springframework.beans.factory.config.DependencyDescriptor;
|
||||
import org.springframework.core.LocalVariableTableParameterNameDiscoverer;
|
||||
import org.springframework.core.MethodParameter;
|
||||
import org.springframework.util.ClassUtils;
|
||||
|
||||
/**
|
||||
* @author Mark Fisher
|
||||
* @author Juergen Hoeller
|
||||
*/
|
||||
public class QualifierAnnotationAutowireBeanFactoryTests {
|
||||
|
||||
private static final String JUERGEN = "juergen";
|
||||
|
||||
private static final String MARK = "mark";
|
||||
|
||||
|
||||
@Test
|
||||
public void testAutowireCandidateDefaultWithIrrelevantDescriptor() throws Exception {
|
||||
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
|
||||
ConstructorArgumentValues cavs = new ConstructorArgumentValues();
|
||||
cavs.addGenericArgumentValue(JUERGEN);
|
||||
RootBeanDefinition rbd = new RootBeanDefinition(Person.class, cavs, null);
|
||||
lbf.registerBeanDefinition(JUERGEN, rbd);
|
||||
assertTrue(lbf.isAutowireCandidate(JUERGEN, null));
|
||||
assertTrue(lbf.isAutowireCandidate(JUERGEN,
|
||||
new DependencyDescriptor(Person.class.getDeclaredField("name"), false)));
|
||||
assertTrue(lbf.isAutowireCandidate(JUERGEN,
|
||||
new DependencyDescriptor(Person.class.getDeclaredField("name"), true)));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAutowireCandidateExplicitlyFalseWithIrrelevantDescriptor() throws Exception {
|
||||
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
|
||||
ConstructorArgumentValues cavs = new ConstructorArgumentValues();
|
||||
cavs.addGenericArgumentValue(JUERGEN);
|
||||
RootBeanDefinition rbd = new RootBeanDefinition(Person.class, cavs, null);
|
||||
rbd.setAutowireCandidate(false);
|
||||
lbf.registerBeanDefinition(JUERGEN, rbd);
|
||||
assertFalse(lbf.isAutowireCandidate(JUERGEN, null));
|
||||
assertFalse(lbf.isAutowireCandidate(JUERGEN,
|
||||
new DependencyDescriptor(Person.class.getDeclaredField("name"), false)));
|
||||
assertFalse(lbf.isAutowireCandidate(JUERGEN,
|
||||
new DependencyDescriptor(Person.class.getDeclaredField("name"), true)));
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testAutowireCandidateWithFieldDescriptor() throws Exception {
|
||||
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
|
||||
ConstructorArgumentValues cavs1 = new ConstructorArgumentValues();
|
||||
cavs1.addGenericArgumentValue(JUERGEN);
|
||||
RootBeanDefinition person1 = new RootBeanDefinition(Person.class, cavs1, null);
|
||||
person1.addQualifier(new AutowireCandidateQualifier(TestQualifier.class));
|
||||
lbf.registerBeanDefinition(JUERGEN, person1);
|
||||
ConstructorArgumentValues cavs2 = new ConstructorArgumentValues();
|
||||
cavs2.addGenericArgumentValue(MARK);
|
||||
RootBeanDefinition person2 = new RootBeanDefinition(Person.class, cavs2, null);
|
||||
lbf.registerBeanDefinition(MARK, person2);
|
||||
DependencyDescriptor qualifiedDescriptor = new DependencyDescriptor(
|
||||
QualifiedTestBean.class.getDeclaredField("qualified"), false);
|
||||
DependencyDescriptor nonqualifiedDescriptor = new DependencyDescriptor(
|
||||
QualifiedTestBean.class.getDeclaredField("nonqualified"), false);
|
||||
assertTrue(lbf.isAutowireCandidate(JUERGEN, null));
|
||||
assertTrue(lbf.isAutowireCandidate(JUERGEN, nonqualifiedDescriptor));
|
||||
assertTrue(lbf.isAutowireCandidate(JUERGEN, qualifiedDescriptor));
|
||||
assertTrue(lbf.isAutowireCandidate(MARK, null));
|
||||
assertTrue(lbf.isAutowireCandidate(MARK, nonqualifiedDescriptor));
|
||||
assertFalse(lbf.isAutowireCandidate(MARK, qualifiedDescriptor));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAutowireCandidateExplicitlyFalseWithFieldDescriptor() throws Exception {
|
||||
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
|
||||
ConstructorArgumentValues cavs = new ConstructorArgumentValues();
|
||||
cavs.addGenericArgumentValue(JUERGEN);
|
||||
RootBeanDefinition person = new RootBeanDefinition(Person.class, cavs, null);
|
||||
person.setAutowireCandidate(false);
|
||||
person.addQualifier(new AutowireCandidateQualifier(TestQualifier.class));
|
||||
lbf.registerBeanDefinition(JUERGEN, person);
|
||||
DependencyDescriptor qualifiedDescriptor = new DependencyDescriptor(
|
||||
QualifiedTestBean.class.getDeclaredField("qualified"), false);
|
||||
DependencyDescriptor nonqualifiedDescriptor = new DependencyDescriptor(
|
||||
QualifiedTestBean.class.getDeclaredField("nonqualified"), false);
|
||||
assertFalse(lbf.isAutowireCandidate(JUERGEN, null));
|
||||
assertFalse(lbf.isAutowireCandidate(JUERGEN, nonqualifiedDescriptor));
|
||||
assertFalse(lbf.isAutowireCandidate(JUERGEN, qualifiedDescriptor));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAutowireCandidateWithShortClassName() throws Exception {
|
||||
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
|
||||
ConstructorArgumentValues cavs = new ConstructorArgumentValues();
|
||||
cavs.addGenericArgumentValue(JUERGEN);
|
||||
RootBeanDefinition person = new RootBeanDefinition(Person.class, cavs, null);
|
||||
person.addQualifier(new AutowireCandidateQualifier(ClassUtils.getShortName(TestQualifier.class)));
|
||||
lbf.registerBeanDefinition(JUERGEN, person);
|
||||
DependencyDescriptor qualifiedDescriptor = new DependencyDescriptor(
|
||||
QualifiedTestBean.class.getDeclaredField("qualified"), false);
|
||||
DependencyDescriptor nonqualifiedDescriptor = new DependencyDescriptor(
|
||||
QualifiedTestBean.class.getDeclaredField("nonqualified"), false);
|
||||
assertTrue(lbf.isAutowireCandidate(JUERGEN, null));
|
||||
assertTrue(lbf.isAutowireCandidate(JUERGEN, nonqualifiedDescriptor));
|
||||
assertTrue(lbf.isAutowireCandidate(JUERGEN, qualifiedDescriptor));
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testAutowireCandidateWithConstructorDescriptor() throws Exception {
|
||||
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
|
||||
ConstructorArgumentValues cavs1 = new ConstructorArgumentValues();
|
||||
cavs1.addGenericArgumentValue(JUERGEN);
|
||||
RootBeanDefinition person1 = new RootBeanDefinition(Person.class, cavs1, null);
|
||||
person1.addQualifier(new AutowireCandidateQualifier(TestQualifier.class));
|
||||
lbf.registerBeanDefinition(JUERGEN, person1);
|
||||
ConstructorArgumentValues cavs2 = new ConstructorArgumentValues();
|
||||
cavs2.addGenericArgumentValue(MARK);
|
||||
RootBeanDefinition person2 = new RootBeanDefinition(Person.class, cavs2, null);
|
||||
lbf.registerBeanDefinition(MARK, person2);
|
||||
MethodParameter param = new MethodParameter(QualifiedTestBean.class.getDeclaredConstructor(Person.class), 0);
|
||||
DependencyDescriptor qualifiedDescriptor = new DependencyDescriptor(param, false);
|
||||
param.initParameterNameDiscovery(new LocalVariableTableParameterNameDiscoverer());
|
||||
assertEquals("tpb", param.getParameterName());
|
||||
assertTrue(lbf.isAutowireCandidate(JUERGEN, null));
|
||||
assertTrue(lbf.isAutowireCandidate(JUERGEN, qualifiedDescriptor));
|
||||
assertFalse(lbf.isAutowireCandidate(MARK, qualifiedDescriptor));
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testAutowireCandidateWithMethodDescriptor() throws Exception {
|
||||
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
|
||||
ConstructorArgumentValues cavs1 = new ConstructorArgumentValues();
|
||||
cavs1.addGenericArgumentValue(JUERGEN);
|
||||
RootBeanDefinition person1 = new RootBeanDefinition(Person.class, cavs1, null);
|
||||
person1.addQualifier(new AutowireCandidateQualifier(TestQualifier.class));
|
||||
lbf.registerBeanDefinition(JUERGEN, person1);
|
||||
ConstructorArgumentValues cavs2 = new ConstructorArgumentValues();
|
||||
cavs2.addGenericArgumentValue(MARK);
|
||||
RootBeanDefinition person2 = new RootBeanDefinition(Person.class, cavs2, null);
|
||||
lbf.registerBeanDefinition(MARK, person2);
|
||||
MethodParameter qualifiedParam =
|
||||
new MethodParameter(QualifiedTestBean.class.getDeclaredMethod("autowireQualified", Person.class), 0);
|
||||
MethodParameter nonqualifiedParam =
|
||||
new MethodParameter(QualifiedTestBean.class.getDeclaredMethod("autowireNonqualified", Person.class), 0);
|
||||
DependencyDescriptor qualifiedDescriptor = new DependencyDescriptor(qualifiedParam, false);
|
||||
DependencyDescriptor nonqualifiedDescriptor = new DependencyDescriptor(nonqualifiedParam, false);
|
||||
qualifiedParam.initParameterNameDiscovery(new LocalVariableTableParameterNameDiscoverer());
|
||||
assertEquals("tpb", qualifiedParam.getParameterName());
|
||||
nonqualifiedParam.initParameterNameDiscovery(new LocalVariableTableParameterNameDiscoverer());
|
||||
assertEquals("tpb", nonqualifiedParam.getParameterName());
|
||||
assertTrue(lbf.isAutowireCandidate(JUERGEN, null));
|
||||
assertTrue(lbf.isAutowireCandidate(JUERGEN, nonqualifiedDescriptor));
|
||||
assertTrue(lbf.isAutowireCandidate(JUERGEN, qualifiedDescriptor));
|
||||
assertTrue(lbf.isAutowireCandidate(MARK, null));
|
||||
assertTrue(lbf.isAutowireCandidate(MARK, nonqualifiedDescriptor));
|
||||
assertFalse(lbf.isAutowireCandidate(MARK, qualifiedDescriptor));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAutowireCandidateWithMultipleCandidatesDescriptor() throws Exception {
|
||||
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
|
||||
ConstructorArgumentValues cavs1 = new ConstructorArgumentValues();
|
||||
cavs1.addGenericArgumentValue(JUERGEN);
|
||||
RootBeanDefinition person1 = new RootBeanDefinition(Person.class, cavs1, null);
|
||||
person1.addQualifier(new AutowireCandidateQualifier(TestQualifier.class));
|
||||
lbf.registerBeanDefinition(JUERGEN, person1);
|
||||
ConstructorArgumentValues cavs2 = new ConstructorArgumentValues();
|
||||
cavs2.addGenericArgumentValue(MARK);
|
||||
RootBeanDefinition person2 = new RootBeanDefinition(Person.class, cavs2, null);
|
||||
person2.addQualifier(new AutowireCandidateQualifier(TestQualifier.class));
|
||||
lbf.registerBeanDefinition(MARK, person2);
|
||||
DependencyDescriptor qualifiedDescriptor = new DependencyDescriptor(
|
||||
new MethodParameter(QualifiedTestBean.class.getDeclaredConstructor(Person.class), 0),
|
||||
false);
|
||||
assertTrue(lbf.isAutowireCandidate(JUERGEN, qualifiedDescriptor));
|
||||
assertTrue(lbf.isAutowireCandidate(MARK, qualifiedDescriptor));
|
||||
}
|
||||
|
||||
|
||||
private static class QualifiedTestBean {
|
||||
|
||||
@TestQualifier
|
||||
private Person qualified;
|
||||
|
||||
private Person nonqualified;
|
||||
|
||||
public QualifiedTestBean(@TestQualifier Person tpb) {
|
||||
}
|
||||
|
||||
public void autowireQualified(@TestQualifier Person tpb) {
|
||||
}
|
||||
|
||||
public void autowireNonqualified(Person tpb) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static class Person {
|
||||
|
||||
private String name;
|
||||
|
||||
public Person(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Target({ElementType.FIELD, ElementType.PARAMETER})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Qualifier
|
||||
private static @interface TestQualifier {
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
|
||||
|
||||
<beans>
|
||||
|
||||
<bean id="listOfArrays" class="org.springframework.beans.GenericBean">
|
||||
<property name="listOfArrays">
|
||||
<list>
|
||||
<list>
|
||||
<value>value1</value>
|
||||
<value>value2</value>
|
||||
</list>
|
||||
</list>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<bean id="list" class="org.springframework.beans.factory.config.ListFactoryBean">
|
||||
<property name="sourceList" value="http://localhost:8080"/>
|
||||
<property name="targetListClass" value="org.springframework.beans.factory.support.BeanFactoryGenericsTests$NamedUrlList"/>
|
||||
</bean>
|
||||
|
||||
<bean id="set" class="org.springframework.beans.factory.config.SetFactoryBean">
|
||||
<property name="sourceSet" value="http://localhost:8080"/>
|
||||
<property name="targetSetClass" value="org.springframework.beans.factory.support.BeanFactoryGenericsTests$NamedUrlSet"/>
|
||||
</bean>
|
||||
|
||||
<bean id="map" class="org.springframework.beans.factory.config.MapFactoryBean">
|
||||
<property name="sourceMap">
|
||||
<map>
|
||||
<entry key="10" value="http://localhost:8080"/>
|
||||
</map>
|
||||
</property>
|
||||
<property name="targetMapClass" value="org.springframework.beans.factory.support.BeanFactoryGenericsTests$NamedUrlMap"/>
|
||||
</bean>
|
||||
|
||||
<bean class="org.springframework.beans.factory.support.BeanFactoryGenericsTests$CollectionDependentBean">
|
||||
<constructor-arg ref="list"/>
|
||||
<constructor-arg ref="set"/>
|
||||
<constructor-arg ref="map"/>
|
||||
</bean>
|
||||
|
||||
<bean class="org.springframework.beans.factory.support.BeanFactoryGenericsTests$CollectionDependentBean"
|
||||
autowire="constructor">
|
||||
</bean>
|
||||
|
||||
<bean id="integerBean" class="org.springframework.beans.GenericIntegerBean">
|
||||
<property name="genericProperty" value="10"/>
|
||||
<property name="genericListProperty">
|
||||
<list>
|
||||
<value>20</value>
|
||||
<value>30</value>
|
||||
</list>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<bean id="setOfIntegerBean" class="org.springframework.beans.GenericSetOfIntegerBean">
|
||||
<property name="genericProperty" value="10"/>
|
||||
<property name="genericListProperty">
|
||||
<list>
|
||||
<value>20</value>
|
||||
<value>30</value>
|
||||
</list>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<bean id="setBean" class="org.springframework.beans.factory.support.BeanFactoryGenericsTests$UrlSet">
|
||||
<property name="urlNames" value="http://www.springframework.org"/>
|
||||
</bean>
|
||||
|
||||
</beans>
|
||||
Reference in New Issue
Block a user