@Autowired Java @Configuration文件中的类成员

时间:2018-06-21 12:40:01

标签: java spring autowired

这些天来,我正在研究如何在XML文件和/或Java表示法中使用Spring Core定义bean。这些方法似乎是等效的,但是如果我们添加以下条件,它们是否仍然如此?

  • 无法更改类文件。

在这种情况下,应将XML文件中写入的所有内容都写入AppConfig文件中(该类具有@Configuration批注)。

可悲的是,我发现了一个反例:使用自动装配设置类成员(属性)。尽管可以在类成员定义的前面加上@Autowired批注,但仅使用Java配置文件却不是这种情况。

@Component
public class Foo{
    @Autowired
    private Bar bar;
}

以下代码实际上是错误的:

public class AppConfig{
    @Bean
    Foo foo(){
         Foo foo = new Foo();
         @Autowired
         Bar foo.bar ?? ;
         return foo;
    }
}

我已经搜索了所有文档和每个问题,但是我对此主题仍然感到困惑。

1 个答案:

答案 0 :(得分:0)

让方法Foo foo()接受Bar bar作为参数。 Spring框架根据要注入的类型识别可用的bean实例。提防Bar的更多bean实例,然后必须使用@Qualifier来区分它们并注入正确的实例。无需再次使用@Autowired

@Bean
Foo foo(Bar bar){
     Foo foo = new Foo();
     foo.method(bar);      // Or whatsoever...
     return foo;
}

在D区有关injecting beans in Spring的文章中了解更多信息,可能会有所帮助。