6

I have a java config class that imports xml files with the @ImportResources annotation. In the java config I'd like to reference to beans that are defined in the xml config, e.g. like:

@Configuration
@ImportResource({
        "classpath:WEB-INF/somebeans.xml"
    }
)
public class MyConfig {
    @Bean
    public Bar bar() {
        Bar bar = new Bar();
        bar.setFoo(foo); // foo is defined in somebeans.xml
        return bar;
    }
}

I'd like to set the bean foo that has been defined in somebeans.xml to the bar bean that will be created in the java config class. How do I get the foo bean?

James
  • 11,654
  • 6
  • 52
  • 81

1 Answers1

14

Either add a field in your configuration class and annotate it with @Autowired or add @Autowired to the method and pass in an argument of the type.

public class MyConfig {

    @Autowired
    private Foo foo;

    @Bean
    public Bar bar() {
      Bar bar = new Bar();
      bar.setFoo(foo); // foo is defined in somebeans.xml
      return bar;
    }
}

or

public class MyConfig {
    @Bean
    @Autowired
    public Bar bar(Foo foo) {
        Bar bar = new Bar();
        bar.setFoo(foo); // foo is defined in somebeans.xml
        return bar;
    }
}

This is all explained in the reference guide.

catch23
  • 17,519
  • 42
  • 144
  • 217
M. Deinum
  • 115,695
  • 22
  • 220
  • 224
  • 1
    Thanks. Good answer. The essential sentence of the docs: "Remember that \@Configuration classes are ultimately just another bean in the container - this means that they can take advantage of \@Autowired injection metadata just like any other bean!" – James Sep 09 '13 at 19:39