0

私はSpringの旅を始めたばかりなので、初心者です。

DAO にテストを書き込もうとしています。

テストを実行すると、スタック トレースが次のように返されます。

Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private pl.com.tt.persistence.TestEntityDaoJPA pl.com.tt.tests.TestPersistenceDAO.testEntityDaoJPA; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [pl.com.tt.persistence.TestEntityDaoJPA] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

TestEntityDAO 実装の上で @Autowired を使用するべきではないようです。@Autowire アノテーション スタック トレースを削除すると、呼び出しメソッド testEntityDaoJPA.getAll(sql) でエラーが返されます。

これは私のテストクラスです:

 @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class TestPersistenceDAO extends AbstractTransactionalJUnit4SpringContextTests{

    @Autowired
    private TestEntityDaoJPA testEntityDaoJPA;

    @Test
    public void testDAO(){
        String sql = "SELECT r FROM TestEntity r WHERE ROWNUM<200";
        testEntityDaoJPA.getAll(sql);
    }
}

私のDAOクラス:

    @Component
public class TestEntityDaoJPA implements TestEntityDao {

    @Autowired
    @PersistenceContext private EntityManager em;

    @Transactional
    public List<TestEntity> getAll(String sql){
        TypedQuery<TestEntity> q = em.createQuery(sql, TestEntity.class );
        List<TestEntity> result = q.getResultList();

              return result;
    }
}

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:p="http://www.springframework.org/schema/p"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:jdbc="http://www.springframework.org/schema/jdbc"
        xmlns:tx="http://www.springframework.org/schema/tx"
        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.xsd
            http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">


    <context:component-scan base-package="pl.com.tt.tests" />
    <context:annotation-config/>
    <tx:annotation-driven/>
    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
        <property name="url"
            value="jdbc:oracle:thin:@192.168.80.128:1521:orcl" />
        <property name="username" value="findfnorg" />
        <property name="password" value="findfnorg" />
    </bean>

    <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="packagesToScan" value="pl.com.tt.tests" />
        <property name="persistenceProviderClass"
            value="org.hibernate.ejb.HibernatePersistence" />
        <property name="loadTimeWeaver">
            <bean
                class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
        </property>
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect
                </prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>
    </bean>



<bean id="transactionManager"
        class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>

</beans>
4

1 に答える 1

3

あなたのパッケージは春までにスキャンされません。

次のことを示します。

<context:component-scan base-package="pl.com.tt.tests" />

しかし、TestEntityDaoJPA は pl.com.tt.persistence にあります。したがって、このパッケージはスキャンされず、Bean は作成されません。

次のように変更してみてください:

<context:component-scan base-package="pl.com.tt.tests,pl.com.tt.persistence" />
于 2013-07-17T12:05:02.533 に答える