我在我的项目中使用基于Java的Spring配置,在@Configuration中的@ Bean-annotated方法中指定bean构造。最近,我开始认为使用@Autowired从@Configuration中删除所有非重要的bean可能会更好,只留下一小部分“root”(关键服务和技术bean,比如那些) Spring MVC)。
不幸的是,只有当它们位于组件扫描包内时,Spring才会注意到@Autowired依赖项的实现,而如果不使用某些XML,我就无法做到这一点。
有没有办法在没有明确指定每个bean的情况下使用@Autowired和基于Java的配置?
答案 0 :(得分:4)
如果我理解正确,那么您期望Spring根据DaoImpl
接口上的自动连接依赖项自动发现Dao
类。
这不会发生 - 您需要使用组件扫描,或者您需要显式声明bean,<bean>
或@Bean
。
原因是Java没有提供发现实现给定接口的类的机制,类加载器就不会那样工作。
答案 1 :(得分:0)
如果您正在通过dao实现Idao,并且您希望将@Autowire依赖于您的引用变量...您需要先: 定义bean,以便您(在Java Based Config中)简单地将impl类返回给接口。 bean名称是您的方法名称。
当您自动装配时,它会在您要查看自动装配的参考变量和您的声明之间搜索匹配的名称。
那你会好的。希望这会有所帮助。