java - 自动装配在 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);
但我宁愿只是自动装配它。
还有其他可行的解决方案吗?
谢谢你。
解决方案
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.
推荐阅读
- android - Uri 图像未显示在 ScrollView 中
- android - 使用 Admob 未展示真实广告
- go - 使用 config.toml 文件部署 Golang 应用程序(api)
- python - WinError 32 进程无法访问文件,因为它正在被另一个进程使用,无法通过python或手动删除文件
- c - GCC:从 .symtab 段中获取正确的函数地址
- java - JPQL 查询中 DTO 构造函数的问题
- css - 应用于两个相等 DIV 之一的 rotate() 不能完美对齐背景图像
- android - Aapt 添加库资源
- powershell - 当您无法访问 -Extension 时使用 Select-Object 是否合适?
- python - while循环中try和if语句的问题