我是Spring(& boot)的新手,我遇到了以下问题。我在XML文件中定义了一些Beans。我可以使用ApplicationContext.getBean()
检索这些bean,而不是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);
但我宁愿只是自动装配它。
还有其他可行的解决方案吗?
谢谢。
答案 0 :(得分:0)
Bean接线对应于提供bean可能需要的依赖项来完成它的工作。在Spring中,bean可以通过两种方式连接在一起:手动和自动装配。
手动布线:在属性或构造函数标记中使用ref属性
<bean id="PartnerDao" name="PartnerDao" class="partner.dao.PartnerDAOImpl">
<constructor-arg index="0" value="${integration.username}">
<ref bean="PartnerDao" />
<constructor-arg/>
<constructor-arg index="1" value="${integration.password}"/>
</bean>
我不确定这是否有效,但至少你可以试试。