简体   繁体   中英

How to use @Autowired with Java-based config?

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?

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.

If you are implementing the Idao via dao and you are looking to @Autowire that dependency into your reference var... you need to first: define the bean so you (in Java Based Config) simply return the impl class to the interface. The bean name is that of your method name.

When you autowire this, it will search for a matching name between your reference variable you are looking to autowire and your declaration.

THEN you will be fine. Hope this helps.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM