2013-12-04 3 views
0

У меня есть проблемы с @Autowired аннотацию@Autowired в классе

autoWiredLocallyTest() проходит

autoWireAtClassTest() не

Вот мои тестовые примеры:

/** 
    * 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 является:

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> 

Что было сделано неправильно или не сделано, но требуется сделать?

Я использую Spring 3.2.5-RELEASE.

ответ

0

Проблема здесь состоит в том, что вы создаете новый объект TestClazz каждый раз. Autowire это вместо:

@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); 
    } 
    } 
1

Вы создаете объект TestClazz используя нового оператора (TestClazz t = new TestClazz();). Вам нужно загрузить его из контекста весны, если вы хотите, чтобы @autowired beans были правильно инициализированы.

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); 
} 
Смежные вопросы