views:

229

answers:

1

I am using Java-based Spring configuration in my project, specifying bean construction in @Bean-annotated methods in @Configuration. Recently, Recently, I've started to think that maybe it would've been better to use @Autowired to remove all non-important beans from @Configuration, leaving only small "root" set of them (key services and technical beans like those of Spring MVC).

Unfortunately, it seems that Spring can notice implementations for @Autowired dependencies only if they are inside component-scanned package which I cannot do without resorting to some XML.

Is there any way to use @Autowired with Java-based configuration without explicitly specifying each bean?

+1  A: 

If I understand you correctly, you're expecting Spring to auto-discover the DaoImpl class based on the autowired dependency on the Dao interface.

This isn't going to happen - you either need to use component scanning, or you need to explicitly declare the bean, either as <bean> or @Bean.

The reason for this is that Java provides no mechanism to discover classes which implement a given interface, the classloader just doesn't work that way.

skaffman
Thank you, that's what I wanted to know.
Shooshpanchick