在这两个Spring启动应用程序类中,有人能告诉我是否存在差异(在弹簧注入和尊重单例条件或任何其他弹簧启动魔法方面)?
@Bean
@Scope("singleton")
public UserService userService(Foo foo){
return new UserService(foo);
}
@Bean
@Scope("singleton")
public Foo foo(){
return new Foo();
}
AND调用 Foo 作为 userService()上的方法参数,而是通过对 foo()的直接方法调用将其注入
@Bean
@Scope("singleton")
public UserService userService(){
return new UserService(foo());
}
@Bean
@Scope("singleton")
public Foo foo(){
return new Foo();
}
答案 0 :(得分:1)
不,没有区别。有人可能会认为,每次在该配置类中调用foo()
时都会得到一个新的bean实例,但是在这种情况下Spring工作的方式是,它会为该配置类创建一个拦截所有方法调用的代理。然后代理检查是否已经存在类型为Foo
的bean,如果是,则返回现有实例,否则将方法调用委托给实现并创建新bean。
代码风格明智,但是,我认为在您的第一个示例中,对Foo
bean的依赖性比第二个示例中的标记更明确。