首页 > 解决方案 > 自动装配在 XML 中定义的 bean - Spring Boot

问题描述

我是 Spring(和引导)的新手,我面临以下问题。我在 XML 文件中定义了一些 Bean。我可以使用 检索这些 bean ApplicationContext.getBean(),而不是我想要的Autowire,或者在无权访问“ApplicationContext”的类中使用它们

我的项目的简化版本:

豆类.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>

应用程序上下文.xml:

<beans>
    <import resource="classpath:beans.xml" />
    <context:annotation-config/>
    <cache:annotation-driven/>
    <task:annotation-driven/>
</beans>

应用程序.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);
    }
}

合作伙伴服务.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);

但我宁愿只是自动装配它。

还有其他可行的解决方案吗?

谢谢你。

标签: javaspringspring-bootjavabeans

解决方案


Bean wiring corresponds to providing the dependencies a bean might need to complete it’s job. In Spring, beans can be wired together in two ways : Manually and Autowiring.

Manual wiring : using ref attribute in property or constructor tag

<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>

I am not sure whether this will work or not but atleast you can try.


推荐阅读