Java 两个具有相同类名(不同包)的Spring服务bean即使使用限定符也会抛出错误
我有以下几点Java 两个具有相同类名(不同包)的Spring服务bean即使使用限定符也会抛出错误,java,spring,spring-boot,Java,Spring,Spring Boot,我有以下几点 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")
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类[package1.userService]指定的注释bean名称“userService”与现有的、不兼容的、名称和类相同的bean定义[package2.userService]冲突
我如何拥有两个同名的服务 从类中删除@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.
*/
在这里,您需要理解@Qualifier的用途 当您创建一个以上的bean时,可能会出现这种情况 相同类型,并且只希望将其中一个连接到属性。这样 在某些情况下,您可以使用@Qualifier注释和@Autowired to 通过指定要连接的确切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;
对不起,我不得不拿走支票,我以为我的支票能用,但现在它说<代码>考虑在配置中定义“package1.UserService”类型的bean。使用类似的测试设置为我工作。你得到了什么错误?它说它找不到其他服务让我用一个更简单的项目试试看这个简单的项目似乎可以工作,但仍然不是我的:-(请分享stacktrace,你能列出你正在使用的spring库的版本吗?因为在这样有限的信息下调试真的很困难。