我有以下......
package package1;
@Service
@Qualifier("kb")
public class UserService {
...
}
package package2;
@Service
@Qualifier("user")
public class UserService {
...
}
@Autowired
@Qualifier("user")
package2.UserService p2;
@Autowired
@Qualifier("kb")
package1.UserService p1;
但是当我尝试运行时,我得到......
org.springframework.beans.factory.BeanDefinitionStoreException:无法解析配置类[boot.Application];嵌套异常是org.springframework.context.annotation.ConflictingBeanDefinitionException:注释指定的bean名称' userService' for bean class [package1.UserService]与同名和类的现有的,不兼容的bean定义冲突[package2.UserService]
我如何拥有2个同名服务?
答案 0 :(得分:3)
从班级中删除@Qualifier,仅在自动装配时使用@Qualifier
@Service("kb")
public class UserService {
...
}
package package2;
@Service("user")
public class UserService {
...
}
来自@Qualifier javadoc
**
* This annotation may be used on a field or parameter as a qualifier for
* candidate beans when autowiring. It may also be used to annotate other
* custom annotations that can then in turn be used as qualifiers.
*/
答案 1 :(得分:3)
你需要在这里了解@Qualifier的目的。
当您创建多个bean时,可能会出现这种情况 相同的类型,并希望只使用属性连接其中一个。在这样的 例如,您可以将@Qualifier注释与@Autowired一起使用 通过指定将连接哪个确切的bean来消除混淆。
您正在尝试创建两个具有相同名称但在不同包中的类。为此,您需要将服务的名称指定为@Service注释的值参数,以区分这两者:
package package1;
@Service("kb")
public class UserService {
...
}
package package2;
@Service("user")
public class UserService {
...
}
@Autowired
@Qualifier("user")
package2.UserService p2;
@Autowired
@Qualifier("kb")
package1.UserService p1;