我正在阅读Spring in Action,我通知说这段可能不正确:
" 默认情况下,bean将被赋予一个与@ Bean注释方法的名称相同的ID "但为什么" 在这种情况下,bean将被命名为 compactDisc "?我想在这种情况下,bean将被命名为sgtPeppers。 我是春天的新人......
更新 我试过阅读本书提供的源代码。这是:
@Configuration
public class CDPlayerConfig {
@Bean
public CompactDisc compactDisc() {
return new SgtPeppers();
}
@Bean
public CDPlayer cdPlayer(CompactDisc compactDisc) {
return new CDPlayer(compactDisc);
}
}
我觉得这本书有像@ochi这样的拼写错误。
答案 0 :(得分:2)
当你读一本书并发现某些事情没有意义时,你应该做的第一件事就是检查勘误。
我相信你正在阅读第4版" Spring in Action"
https://www.manning.com/books/spring-in-action-fourth-edition
在勘误表中:
Page 44, Section 2.3.2, third paragraph: In this case, the bean will be named compactDisc. should be In this case, the bean will be named sgtPeppers.
答案 1 :(得分:0)
当JavaConfig遇到这样的方法时,它将执行该方法并将返回值注册为BeanFactory中的bean。 @Bean是方法级注释,是XML元素的直接模拟。
为了比较,代码的配置与以下Spring XML完全相同:
<beans>
<bean name="compactDisc" class="com.acme.compactDisc"/>
</beans>
此属性唯一地指定bean标识符。在基于XML的配置元数据中,您使用id和/或name属性唯一地指定bean标识符(通过名称或ID )。
如需进一步探索,请考虑给定的链接:
答案 2 :(得分:0)
好吧,看起来这部分在本书中是正确的:
默认情况下,bean将被赋予一个与@ Bean-annotated方法名称相同的ID
但这部分看起来也不正确:
在这种情况下,bean将被命名为
compactDisc
我创建了一个快速应用,其中给出了以下psvm
public class MyApp {
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(MyConfig.class);
// 1) This bean name will not be found, the method name is sgtPeppers
CompactDisc compactDisc = ctx.getBean("compactDisc", CompactDisc.class);
System.out.println("app 1: " + compactDisc.toString());
// 2) this bean will be found
SgtPeppers sgtPeppers = ctx.getBean("sgtPeppers", SgtPeppers.class);
System.out.println("app 2: " + sgtPeppers.toString());
CdPlayer cdPlayer = ctx.getBean("cdPlayer", CdPlayer.class);
System.out.println("app 3: " + cdPlayer.toString());
}
}
MyConfig.java
看起来像这样:
@Configuration
public class MyConfig {
@Bean
public CompactDisc sgtPeppers() {
return new SgtPeppers();
}
@Bean
public CdPlayer cdPlayer(CompactDisc compactDisc) {
return new CdPlayer(compactDisc);
}
}
将为您提供例外
线程中的异常&#34; main&#34; org.springframework.beans.factory.NoSuchBeanDefinitionException:没有名为&#39; compactDisc &#39;可用
但是,如果我将@Bean-annotated
方法的名称更改为compactDisc
,则例外情况会有所不同。它写着:
线程中的异常&#34; main&#34; org.springframework.beans.factory.NoSuchBeanDefinitionException:没有名为&#39; sgtPeppers &#39;可用
简而言之,是的确看起来这本书有错......:)