Я новичок в Spring (& boot) и столкнулся со следующей проблемой.У меня есть некоторые Бины, определенные в файле XML.Я могу получить эти бины, используя ApplicationContext.getBean()
, вместо этого я бы хотел Autowire
их или использовать их в классах, которые не имеют доступа к ApplicationContext
Упрощенная версия моего проекта:
beans.xml:
<bean id="PartnerDao" name="PartnerDao" class="partner.dao.PartnerDAOImpl">
<constructor-arg index="0" value="${integration.username}"/>
<constructor-arg index="1" value="${integration.password}"/>
</bean>
applicationContext.xml:
<beans>
<import resource="classpath:beans.xml" />
<context:annotation-config/>
<cache:annotation-driven/>
<task:annotation-driven/>
</beans>
Application.java:
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(Application.class);
}
}
PartnerService.java:
@Service
public class PartnerService {
@Autowired
@Qualifier("PartnerDao")
PartnerDAO partnerDao;
}
При сборке я сталкиваюсь со следующим исключением:
org.springframework.beans.factory.NoSuchBeanDefinitionException:
No qualifying bean of type 'partner.dao.PartnerDAO' available:
expected at least 1 bean which qualifies as autowire candidate.
Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=PartnerDao)}
Как я уже говорил, я новичок в Spring и использую аннотации Spring Boot для маневрирования, но мой супервизор сконструировал это beans.xml
для интеграции с другими службами, и я не уверен, как автоматически подключить его.
Я всегда могу сделать:
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
PartnerDAO partnerDao = context.getBean(partner.dao.PartnerDAOImpl.class);
Но я бы предпочел просто подключить его автоматически.
Есть ли другое жизнеспособное решение?
Спасибо.