Why does this work:
@Configuration
public class MyConfig {
@Bean
public A getA() {
return new A();
}
@Bean <-- Shouldn't I need @Autowired here?
public B getB(A a) {
return new B(a);
}
}
Thanks!
Why does this work:
@Configuration
public class MyConfig {
@Bean
public A getA() {
return new A();
}
@Bean <-- Shouldn't I need @Autowired here?
public B getB(A a) {
return new B(a);
}
}
Thanks!
@Autowire
lets you inject beans from context to "outside world" where outside world is your application. Since with@Configuration
classes you are within "context world ", there is no need to explicitly autowire (lookup bean from context).Think of analogy like when accessing method from a given instance. While you are within the instance scope there is no need to write
this
to access instance method, but outside world would have to use instance reference.Edit
When you write
@Configuration
class, you are specifying meta data for beans which will be created by IOC.@Autowire
annotation on the other hand lets you inject initialized beans, not meta-data, in application. So, there is no need for explicit injection because you are not working with Beans when insideConfiguration
class.A class with @Configuration annotation is where you're defining your beans for the context. But a spring bean should define its own dependencies. Four your case B class should be defining it's own dependencies in class definition. For example if your B class depends on your A class than it should be like below:
In above case while spring is building its context it looks for the bean which's type is A which is also defined as a Bean at your configuration class and Autowires it to B at runtime so that B can use it when required.