同时使用基于XML和基于注释的配置时,找不到Bean匹配项

时间:2018-08-09 20:48:48

标签: xml spring dependency-injection annotations

我有一个旧应用程序,该应用程序使用很多基于XML的配置作为其依赖项,我们正在尝试将其大部分转换为基于注释的配置。但是,不可能一口气将其完全删除,因此我想保留两种类型的配置。

XML中有一些依赖项已经在注释上下文中进行了初始化,我需要它们在相同的上下文中才能正常工作。

//这只是解释我的问题的伪代码

@Configuration
@ImportResource("classpath*:com/cric/ipl/parentApplicationContext.xml")
@ComponentScan("classpath*:com/cric")
public class MySpringConfiguration{

@Bean("SportsBean")
public SportsBean sportsBean (){
   return new SportsBean();
}

}

parentApplicationContext.xml内:

<bean id="someOtherBean" class="com.fifa.football.russia.SomeOtherBean">
   <property name="first" ref="SportsBean">
</beans>

当我初始化xml配置文件时,即使我在MySpringConfiguration类中将其初始化,它也会显示“找不到与SportsBean相匹配的bean”。因此,我需要XML配置的bean能够使用在注释配置中初始化的bean。

main方法中,这就是我初始化AnnotationConfigApplicationContext的方式。

AnnotationConfigApplicationContext ctx= new AnnotationConfigApplicationContext ();
ctx.register(MySpringConfiguration.class);

有人可以帮助我解决这个问题吗?我希望我能够向其他人解释这个问题。如果我的问题不清楚,请随时告诉我。谢谢。

1 个答案:

答案 0 :(得分:0)

我不知道是否已经解决了这个问题,但是仅仅看一下,似乎您忘记了将 name 属性添加到 @Bean 批注中。另外,spring bean的命名约定是bean名称以小写字母开头,并以驼峰大小写。

   @Bean(name = "sportsBean")
   public SportsBean sportsBean (){
    return new SportsBean();
   }

此外,由于Bean的名称与创建Bean的方法相同,因此您也可以省略显式命名,因为默认情况下,Spring将Bean命名为与创建方法相同。豆

public SportsBean sportsBean (){
 return new SportsBean();
}