Spring引导bean进入bean注入方法

时间:2016-02-19 17:39:36

标签: java spring dependency-injection spring-boot

在这两个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();
}

1 个答案:

答案 0 :(得分:1)

不,没有区别。有人可能会认为,每次在该配置类中调用foo()时都会得到一个新的bean实例,但是在这种情况下Spring工作的方式是,它会为该配置类创建一个拦截所有方法调用的代理。然后代理检查是否已经存在类型为Foo的bean,如果是,则返回现有实例,否则将方法调用委托给实现并创建新bean。

代码风格明智,但是,我认为在您的第一个示例中,对Foo bean的依赖性比第二个示例中的标记更明确。