Reputation: 667
I have trouble with @Autowired annotation
autoWiredLocallyTest() passes
autoWireAtClassTest() failed
Here is my test cases:
/**
* Spring Autowired test.
*/
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
@RunWith(SpringJUnit4ClassRunner.class)
public class AutowiredTest {
@Autowired
private ActionBeans localBeans;
@Test
public void autoWiredLocallyTest(){
//pre-test
Assert.assertNotNull(localBeans);
}
@Test
public void autoWireAtClassTest(){
TestClazz t = new TestClazz();
boolean isAutoWiredFromClass = t.isAutowired();
Assert.assertTrue(isAutoWiredFromClass);
}
}
TestClazz is:
public class TestClazz {
@Autowired
@Qualifier("actions")
private ActionBeans tempowieBiny;
public boolean isAutowired(){
return(this.tempowieBiny!=null);
}
}
applicationContext.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<import resource="actions.xml" />
<import resource="datasources.xml" />
</beans>
actions.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id='actions' class="net.virtalab.jsonio.configuration.actions.ActionBeans" scope="singleton">
<qualifier value="actions" />
</bean>
</beans>
What was made wrong or not done, but required to do?
I using Spring 3.2.5-RELEASE.
Upvotes: 0
Views: 118
Reputation: 1757
The problem here is that you're creating new TestClazz object every time. Autowire it instead:
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
@RunWith(SpringJUnit4ClassRunner.class)
public class AutowiredTest {
@Autowired
private ActionBeans localBeans;
// Added here
@Autowired
private TestClazz t;
@Test
public void autoWiredLocallyTest(){
//pre-test
Assert.assertNotNull(localBeans);
}
@Test
public void autoWireAtClassTest(){
//TestClazz t = new TestClazz(); COMMENTED OUT
boolean isAutoWiredFromClass = t.isAutowired();
Assert.assertTrue(isAutoWiredFromClass);
}
}
Upvotes: 0
Reputation: 11672
You are instantiating TestClazz
using the new operator (TestClazz t = new TestClazz();
). You need to load it from your spring context if you want the @autowired beans to be properly initialised.
Try:
@Autowired
ApplicationContext testContext;
@Test
public void autoWireAtClassTest(){
// TestClazz t = new TestClazz();
TestClazz t = (TestClazz)testContext.getBean(TestClazz.class);
boolean isAutoWiredFromClass = t.isAutowired();
Assert.assertTrue(isAutoWiredFromClass);
}
Upvotes: 1