最近开始学习Spring,在看《Spring实战4th》3.3“处理自动装配的歧义性”那一部分时,书上提到(也从网上看到了类似的用法):
通过在一个类上加注@Component以及@Qualifier(“x”)可以为其配置限定符来标识区分同一个接口下的不同实现类,用以在需要进行@Autowired自动装配的地方使用@Qualifier(“x”)来指定特定的实现类对象bean。
但是本人在练习过程中,IntelliJ通过上述方式识别不了,只能在@Bean处添加@Qualifier(“x”),在后续的测试中才能识别。如下:
在Dessert的实现类Cake上加上@Component以及@Qualifier(“Lovely”)
1 2 3
| @Component @Qualifier("Lovely") public class Cake implements Dessert { }
|
然后是配置类
1 2 3 4 5 6 7 8 9 10 11 12
| @Configuration public class JavaConfig { @Bean Dessert cake() { return new Cake(); }
@Bean Dessert iceCream() { return new IceCream(); } }
|
测试类中无法识别:
1 2 3 4 5 6 7 8 9 10 11 12
| @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = JavaConfig.class) public class PlateTest { @Autowired @Qualifier("Lovely") Dessert dessert;
@Test public void testNotNull() { Assert.assertNotNull(dessert); } }
|
但是,测试能PASS,应该是IntelliJ中的识别BUG。虽然是一个BUG,但是个人的理解是推荐在配置Bean中,进行限定,而不是在每一个类处进行限定。如下在JavaConfig类中进行配置:
1 2 3 4 5
| @Bean @Qualifier("Lovely") Dessert cake() { return new Cake(); }
|
这样就不会出现报提示错。
以上在运行过程均没有错误,只是IDE辅助出现了问题。