2016-02-19 120 views
1

任何人都可以告诉我,这两个春季启动应用程序类是否有区别(春季豆注入和尊重单身条件或任何其他春季启动魔术方面)?春季引导豆注入豆注入方法

@Bean 
@Scope("singleton") 
public UserService userService(Foo foo){ 
    return new UserService(foo); 
} 

@Bean 
@Scope("singleton") 
public Foo foo(){ 
    return new Foo(); 
} 

,并呼吁userService(不宣布方法参数)而是通过直接的方法调用将其注入到富()

@Bean 
@Scope("singleton") 
public UserService userService(){ 
    return new UserService(foo()); 
} 

@Bean 
@Scope("singleton") 
public Foo foo(){ 
    return new Foo(); 
} 

回答

1

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

代码风格明智,但是,我认为在您的第一个例子中,对Foo bean的依赖关系比第二个示例更清晰。

+0

谢谢。我同意第一种风格清楚地标记,但是我们总是使用第二种风格,因为它允许我们在intellij中按住CTRL键点击以快速浏览到foo()注入器...从而快速遍历依赖注入树。 –