package com.sishuok.spring4.genericinject; import com.sishuok.spring4.genericinject.component.BeanImpl1; import com.sishuok.spring4.genericinject.component.BeanImpl2; import com.sishuok.spring4.genericinject.component.BeanInteface; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportResource; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; import java.util.Arrays; import java.util.List; import static org.hamcrest.CoreMatchers.hasItem; import static org.hamcrest.CoreMatchers.isA; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; /** * <p>User: Zhang Kaitao * <p>Date: 13-12-31 * <p>Version: 1.0 */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = GenericInjectTest.GenericInjectConfig.class) public class GenericInjectTest { @Autowired @Qualifier("myList1") //必须指定名字(因为xml中配置的集合没有泛型,除非只有一个集合 Bean) private List<BeanInteface> myList1; @Autowired @Qualifier("myList2") //必须指定名字(因为xml中配置的集合没有泛型,除非只有一个集合 Bean) private List<BeanInteface> myList2; @Autowired private List<BeanInteface> beanIntefaceList; @Test public void test() { assertEquals(1, beanIntefaceList.size()); assertThat(beanIntefaceList, hasItem(isA(BeanImpl1.class))); //如果没有 public List<BeanInteface> customBeanIntefaceList() 则如下返回真 // Assert.assertEquals(2, beanIntefaceList.size()); assertEquals(1, myList1.size()); assertThat(myList1, hasItem(isA(BeanImpl1.class))); assertEquals(1, myList2.size()); assertThat(myList2, hasItem(isA(BeanImpl2.class))); RequestMappingHandlerMapping r; } @Configuration @ImportResource("classpath:spring-genericInject.xml") @ComponentScan(basePackages = "com.sishuok.spring4.genericinject.component") static class GenericInjectConfig { @Bean public List<BeanInteface> customBeanIntefaceList() { return Arrays.asList((BeanInteface) new BeanImpl1()); } @Bean public List<BeanImpl1> customBeanBeanImpl1List() { return Arrays.asList(new BeanImpl1()); } } }