是否可以在不使用@Qualifer和@resource的情况下在两个不同的命名空间中定义具有相同名称的bean

时间:2017-09-14 08:13:04

标签: spring spring-mvc spring-bean spring-ioc

我在春天有两个包和bean,如下所示

com.myapp.test1

  • 为myService

com.myapp.test2

  • 为myService

第1部分:这种情况的解决方案是为这样的bean命名:

@Service(name="myService1")
myService

 @Service(name="myService2")
 myService

和Inject like

@Autowire
@Qualifier("myService1")

有没有没有part1方法的解决方案,我需要在不同的名称空间中定义两个具有相同名称的bean,而不是name & @Qualifier

主题(我使用的是春天)。

1 个答案:

答案 0 :(得分:0)

默认情况下,Spring会根据AnnotationBeanNameGenerator为bean命名。因此对于相同的类名(即使在不同的包上),它们将被赋予相同的名称并失败。

您尝试过最简单的解决方案是为@Service注释中的一个(或两个)bean命名。

但是,在注入时,您不必指定此名称,因为注入正在查找类实例,在这种情况下,两个类都不同。

com.myapp.test1.MyServicecom.myapp.test2.MyService

不同

如果两者都使用@Service进行注释并由Spring管理,则可以按如下方式注入:

我的服务1:

package com.myapp.test1;

@Service
public class MyService {

}

我的服务2:

package com.myapp.test2;

@Service("myService2")
public class MyService {

}

注射它们:

@Controller
public class MyController {
    @Autowired
    //no need for qualifier here
    private com.myapp.test1.MyService myService1;
    @Autowired
    //no need for qualifier here
    private com.myapp.test2.MyService myService2;
    ...
}

也就是说,给两个班级赋予不同的名称会更容易。