如果您無法發現錯誤,至少說是或否,我已經執行了所有正確的步驟,那麼至少我可以認爲我的另一個錯誤上下文xml文件@Autowired無法找到使用@Repository標識的存儲庫bean
該錯誤是如下
引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:[net.com.htts.transaction.service.mapping.FundService]找不到類型的匹配豆對於依賴關係:預計至少有1個bean有資格作爲此依賴關係的自動導向候選。依賴註釋:{@ org.springframework.beans.factory.annotation.Autowired(required = true)}
我有一個Junit測試,它不能加載存儲庫bean。
1)我創建了一個接口FundRepository view plaincopy to clipboardprint? 注意:代碼塊中的文本內容自動包裝爲文字 package net.com.htts.transaction.data.repository;
import org.springframework.stereotype.Repository;
import net.com.htts.transaction.data.entity.Fund;
@Repository
public interface FundRepository {
public void createFund(Fund fund);
}
package net.com.htts.transaction.data.repository;
import org.springframework.stereotype.Repository;
import net.com.htts.transaction.data.entity.Fund;
@Repository
public interface FundRepository {
public void createFund(Fund fund);
}
該接口具有@Repository
2)我創建了一個實現我的接口
視圖plaincopy到clipboardprint的FundRepositoryImpl? 注意:代碼塊中的文本內容自動包裝爲文字 package net.com.htts.transaction.data.repository;
import java.util.List;
import net.com.htts.transaction.data.entity.Fund;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceContextType;
public class FundRepositoryImpl implements FundRepository{
@PersistenceContext(type = PersistenceContextType.EXTENDED)
private EntityManager entityManager;
public void createFund(Fund fund) {
entityManager.persist(fund);
}
}
package net.com.htts.transaction.data.repository;
import java.util.List;
import net.com.htts.transaction.data.entity.Fund;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceContextType;
public class FundRepositoryImpl implements FundRepository{
@PersistenceContext(type = PersistenceContextType.EXTENDED)
private EntityManager entityManager;
public void createFund(Fund fund) {
entityManager.persist(fund);
}
}
創建彈簧數據上下文
在該上下文中添加以下視圖plaincopy到clipboardprint
? 注:在代碼塊文本內容自動爲自動換行
<!-- Scan the repositories -->
<jpa:repositories base-package="net.com.htts.transaction.data.repository" />
<!-- Scan the data layer -->
<context:component-scan base-package="net.com.htts.transaction.data" />
<!-- Scan the repositories -->
<jpa:repositories base-package="net.com.htts.transaction.data.repository" />
根據一切我讀這應該足以讓我在@Autowired FundRepository。
JUnit的是如下
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:/spring/fund-test-data.xml")
public class FundRepositoryTest {
@Autowired
private FundRepository repository;
@Test
public void createFund(){
}
}
上下文是如下
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan">
<list>
<value>net.com.htts.transaction.data</value>
<value>net.com.htts.transaction.data.repository</value>
</list>
</property>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="databasePlatform" value="org.hibernate.dialect.MySQLInnoDBDialect" />
<property name="generateDdl" value="true" />
</bean>
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">validate</prop>
<prop key="hibernate.ejb.naming_strategy">
net.com.htts.transaction.data.naming.NamingStrategy</prop>
</props>
</property>
</bean>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost/funds" />
<property name="username" value="fund_user" />
<property name="password" value="fund_user" />
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<!-- Scan the data layer -->
<context:component-scan base-package="net.com.htts.transaction.data" />
<!-- Scan the repositories -->
<jpa:repositories base-package="net.com.htts.transaction.data.repository" />
</beans>