Was ist der Unterschied zwischen @Autowired und immer eine Bohne von der Anwendung Kontext?

Ich habe einen dao-unit-test ist wie folgt deklariert:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring/applicationContext.xml"})
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
@Transactional
public class RegisterDaoTest extends AbstractTransactionalJUnit4SpringContextTests {

    ApplicationContext applicationContext = new     FileSystemXmlApplicationContext("classpath:/spring/applicationContext.xml");
    private IRegisterDao registerDao = applicationContext.getBean(IRegisterDao.class);

Wenn ich das Gerät testen, alle pass und ich kann sehen, dass die db immer neu in zwischen unit-test-Ausführungen.

Meiner test-db ist wie folgt definiert:

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
    <property name="url" value="jdbc:hsqldb:mem:test;sql.syntax_ora=true;create=true"/>
    <property name="username" value="sa"/>
    <property name="password" value=""/>
</bean>

<jdbc:initialize-database data-source="dataSource" ignore-failures="DROPS">
    <jdbc:script location="file:Artifacts/Hsql Version Scripts/install/droptables.sql" separator=";"/>
    <jdbc:script location="file:Artifacts/Hsql Version Scripts/install/install.sql" separator="/;"/>
</jdbc:initialize-database>

Aber wenn ich mein test, um zu verwenden, @Autowired, unten definiert, ist es nicht ausgeführt init-db-Skripte.

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring/applicationContext.xml"})
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
@Transactional
public class RegisterDaoTest extends AbstractTransactionalJUnit4SpringContextTests {

/*
ApplicationContext applicationContext = new FileSystemXmlApplicationContext("classpath:/spring/applicationContext.xml");
    private IRegisterDao registerDao = applicationContext.getBean(IRegisterDao.class);
*/

    @Autowired
    private IRegisterDao registerDao;

Sehe ich nicht, was der Unterschied ist. Ich habe zwei Datei ApplicationContext.XML-Dateien, eine im Hauptgebäude und eine in der test (so kann ich das überschreiben der db mit test-db)

Mir, es sollte ausführen die gleichen. Bin ich etwas fehlt?

Dank,

  • Wo ist dein IRegisterDao definiert in der xml-Datei? können Sie bitte teilen Sie das?
InformationsquelleAutor Eric | 2012-02-13
Schreibe einen Kommentar