我在春天有两个包和bean,如下所示
com.myapp.test1
com.myapp.test2
第1部分:这种情况的解决方案是为这样的bean命名:
@Service(name="myService1")
myService
和
@Service(name="myService2")
myService
和Inject like
@Autowire
@Qualifier("myService1")
有没有没有part1方法的解决方案,我需要在不同的名称空间中定义两个具有相同名称的bean,而不是name & @Qualifier
主题(我使用的是春天)。
答案 0 :(得分:0)
默认情况下,Spring会根据AnnotationBeanNameGenerator为bean命名。因此对于相同的类名(即使在不同的包上),它们将被赋予相同的名称并失败。
您尝试过最简单的解决方案是为@Service
注释中的一个(或两个)bean命名。
但是,在注入时,您不必指定此名称,因为注入正在查找类实例,在这种情况下,两个类都不同。
com.myapp.test1.MyService
与com.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;
...
}
也就是说,给两个班级赋予不同的名称会更容易。