我是第一次学习 Spring Framework 和 DI,并尝试了一个带有 Spring-boot 1.2.0 的小测试应用程序(由于 Spring Framework 版本要求为 4.1.x,项目限制),我制作了一个具有两个属性的 BookBean:一个字符串标题和一个作者列表。显然 DI 将标题作为列表的唯一成员注入,我完全不知道为什么。
我在标记为 @Bean 的方法上添加了一些日志记录,以查看它们何时被调用以及 BookBean 构造函数,我注意到在调用构造函数之后调用了 String 方法:
[2019-04-29 14:46:05.631] boot - 3888 INFO [main] --- CollectionConfig: returning title: [A sample book]
[2019-04-29 14:46:05.637] boot - 3888 INFO [main] --- BookBean: construction called
[2019-04-29 14:46:05.649] boot - 3888 INFO [main] --- CollectionConfig: returning authors: [[John, Adam, Harry]]
这让我相信 DI 在尝试构造 BookBean 时没有可用的 List bean,并且“做了次好的事情”,返回一个注入了它知道的唯一 String bean 的 List:title。
反过来,这让我相信我可能以错误的方式做整个 Autowired 事情,并且我可能无法按照要求按类型/名称排列自动装配。据我了解,默认自动装配是按类型,构造函数应该尝试查找两种不同类型的 bean:String 和 List,但我尝试使用 @Bean(name = "title"/"authors" 注释 bean ) 没有成功。如果我还尝试使用 @Qualifier("title"/"authors") 注释构造函数参数,则会收到以下错误:
[2019-04-29 14:54:25.847] boot - 20824 INFO [main] --- CollectionConfig: returning title: [A sample book]
[2019-04-29 14:54:25.853] boot - 20824 WARN [main] --- AnnotationConfigEmbeddedWebApplicationContext: Exception encountered during context initialization - cancelling refresh attempt
素胚勾勒不出你
米琪卡哇伊
相关分类