如何在基于Java的配置中使用@Autowired?

如何在基于Java的配置中使用@Autowired?

问题描述:

我在我的项目中使用基于Java的Spring配置,在@Configuration中的@ Bean注释方法中指定bean构造。最近,我开始认为使用@Autowired从@Configuration中删除所有不重要的bean会比使用@Autowired更好,只留下一小部分“根”集(关键服务和技术类的Spring MVC)。如何在基于Java的配置中使用@Autowired?

不幸的是,似乎Spring可以注意到@Autowired依赖关系的实现,只有当它们位于组件扫描包内部时,我不能诉诸于某些XML才能实现。

有没有任何方式使用@Autowired与基于Java的配置,而不明确指定每个bean?

+2

'@ Autowired'在普通'@ Bean'风格的配置中工作得很好,不需要组件扫描(甚至不需要)。请举一个你有什么样的例子。 – skaffman 2010-06-03 12:31:06

+0

例如,我有一个@Bean MyService服务,它有一个'@Autowired IDao dao'。有一个'接口IDao'和'类DaoImpl实现IDao',并没有'IDao'的其他实现。据我所知,有必要声明'@Bean IDao dao(){return new DaoImpl}'或使用组件扫描。否则,我会得到'没有找到类型为IDao的依赖性异常的匹配bean。 – Fixpoint 2010-06-03 14:00:11

+0

您可以使用'@ ComponentScan'进行组件扫描。不需要XML。 – Nick 2011-10-05 13:38:40

如果我理解正确,那么您预计Spring将根据Dao接口上的自动布线依赖关系自动发现DaoImpl类。

这不会发生 - 您需要使用组件扫描,或者您需要明确声明该bean,可以是<bean>@Bean

原因在于Java没有提供机制来发现实现给定接口的类,因此类加载器不会以这种方式工作。

+0

谢谢,这就是我想知道的。 – Fixpoint 2010-06-05 17:20:21

+0

这怎么能做到? – prashu132 2013-01-22 07:50:57

如果你正在通过dao实现Idao,并且你正在寻找依赖于你的引用var的@Autowire ......你首先需要: 定义bean,以便你(在基于Java的配置中)简单地返回impl类到界面。 bean名称是您的方法名称。

当你自动装配它时,它会搜索你想要自动装配的参考变量和你的声明之间的匹配名称。

然后你会好起来的。希望这可以帮助。