kyberorg
kyberorg

Reputation: 667

@Autowired in class

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

Answers (2)

Ernestas Kardzys
Ernestas Kardzys

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

Kevin
Kevin

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

Related Questions