我們有一個應用程序,我們試圖將一個空的java.util.HashSet
注入java.util.Set
類型的成員中,本身是@Component
。春天似乎注入了一個HashSet
與包含類型的一個元素。任何想法爲什麼春天不只是注入一個空集?彈簧注入一個單元集而不是一個空集
集元素類:
@Component
public class SetElement
{
private String value;
public String getValue()
{
return value;
}
}
類包含一組作爲成員:
@Component
public class MyClassWithSet
{
@Autowired
private Set<SetElement> setOfElements;
protected void setStringSet(Set<SetElement> stringSet)
{
this.setOfElements = stringSet;
}
public Set<SetElement> getStringSet()
{
return Collections.unmodifiableSet(setOfElements);
}
}
Spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
">
<bean id="setOfElements" class="java.util.HashSet" />
<context:component-scan base-package="com.vikdor.db " />
</beans>
抽樣檢測情況,以確認該行爲
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations =
{ "classpath:META-INF/spring.xml" })
public class SpringSetTest
{
@Autowired
private MyClassWithSet myClassWithSet;
@Test
public void test()
{
assertNotNull(myClassWithSet);
assertNotNull(myClassWithSet.getStringSet());
assertTrue(myClassWithSet.getStringSet().isEmpty());
}
}
是測試類中的* only *測試方法嗎? – parsifal
是的,沒有別的。實際上,這些是整個eclipse項目中的四個文件,我試圖重現這個問題(在我們在大型應用程序中發現這個問題之後)。 – Vikdor
出於好奇該集合包含的元素是什麼? –