Имам проблем с автоматичното свързване на свойство на bean в моя клас, декларирано като @Component
. Опитах няколко различни неща, но за съжаление получавам NoSuchBeanDefinitionException
по време на пролетната конфигурация за този конкретен боб.
По-долу е примерен код, за да моделирам това, което имам в момента.
package com.foo.bar;
@Component
public class MyDeployer implements ApplicationContextAware
{
@Autowired
private ClusterRegistry clusterRegistry; //The bean I am trying to wire
...
}
В контекста на моето приложение имам следното:
<beans ...... />
<context:component-scan base-package="com.foo.bar" />
<context:annotation-config />
<bean id="clusterRegistry" name="clusterRegistry" class="com.my.implementation.ClusterRegistryFileImpl" />
</beans>
Моят клас ClusterRegistryFileImpl е дефиниран по-долу:
package com.my.implementation;
public final class ClusterRegistryFileImpl implements ClusterRegistry
{
...
}
Обърнете внимание, че ClusterRegistryFileImpl имплементира интерфейса ClusterRegistry и този интерфейс/клас на внедряване няма зависимости. Тези файлове също не използват сканиране на компоненти (и не са анотирани от @Component
, но не мисля, че ще трябва да бъдат, ако декларирам bean-а в моя appContext.
Моят интеграционен тест изглежда така
@ContextConfiguration(locations= {
"/com/app/context/path/appContext.xml",
"/com/app/context/path/aDifferentAppContext.xml"
})
public class MyDeployerTest extends AbstractTestNGSpringContextTests
{
@Autowired
private MyDeployer deployer; //class that uses the bean I need
@Test
protected void testDeployerStartup()
{
deployer.startup();
...
}
}
По-долу е грешката:
Caused by:
org.springframework.beans.factory.NoSuchBeanDefinitionException:
No qualifying bean of type [com.my.implementation.ClusterRegistry] 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)}
Всякакви предложения или насоки ще бъдат много оценени.