我有以下弹簧配置(实际上,配置更广泛,但我已经包含了相关部分):
testApplicationContext.xml
<!-- Business -->
<import resource="contexts/testBusinessContext.xml" />
<!-- Dao -->
<import resource="contexts/testDaoContext.xml" />
<!-- Persistence configuration -->
<import resource="contexts/testPersistenceContext.xml" />
<!-- Service actions -->
<import resource="contexts/testServiceActionContext.xml" />
testBusinessContext.xml
<bean id="basketBusiness" class="com.company.salesdataservice.business.BasketBusiness">
<property name="basketDao" ref="basketDao" />
<property name="tokenDao" ref="tokenDao" />
<property name="houseDao" ref="houseDao" />
<property name="currencyDao" ref="currencyDao" />
</bean>
testDaoContext.xml
<bean id="currencyDao" class="com.company.salesdataservice.dao.CurrencyDao">
<property name="dataSource" ref="companyDomainDataSource" />
</bean>
<bean id="houseDao" class="com.company.salesdataservice.dao.HouseDao"/>
<bean id="basketDao" class="com.company.salesdataservice.dao.BasketDao">
<property name="dataSource" ref="companyBookingDataSource" />
</bean>
<bean id="tokenDao" class="com.company.salesdataservice.dao.JavaRandomTokenDao" />
testPersistenceContext.xml
<bean id="companyBookingTransactionManager" class="com.company.utils.data.TransactionManager">
<property name="manager" ref="companyBookingSpringTransactionManager" />
</bean>
<bean id="companyBookingSpringTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="companyBookingDataSource" />
</bean>
<!-- initialised by a DataSourceInitializer. Left out for brevity. -->
<jdbc:embedded-database id="companyBookingDataSource" type="H2"/>
<!-- initialised by a DataSourceInitializer. Left out for brevity. -->
<jdbc:embedded-database id="companyDomainDataSource" type="H2"/>
testServiceActionContext.xml
<bean id="createBasketServiceAction" class="com.company.salesdataservice.serviceaction.CreateBasketServiceAction">
<property name="transactionManager" ref="companyBookingTransactionManager" />
<property name="basketBusiness" ref="basketBusiness" />
</bean>
我正试图在我的一个测试中自动装载CreateBasketServiceAction
类型的字段:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "/testApplicationContext.xml"})
public class CreateBasketServiceActionTest {
@Autowired
CreateBasketServiceAction createBasketServiceAction;
}
然而,Spring一直告诉我它不能自动装配:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.company.utils.data.serviceaction.TransactionalServiceAction] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency.
如果我用BasketBusiness basketBusiness
字段替换该字段,那么Spring完全有能力这样做。
据我所知,CreateBasketServiceAction
和BasketBusiness
在XML配置中定义为<bean />
。
过去几个小时,我一直在撞墙。我做错了什么?