【发布时间】:2014-08-18 21:13:47
【问题描述】:
在使用<component-scan> 自动检测和创建@Controller bean 的上下文配置中,我想避免在控制器属性上使用@Autowired 注释(出于各种原因,我需要/更喜欢显式注入控制器需要的bean)。控制器具有标记为@Required 的属性设置器。在这种情况下,如何声明要注入控制器的 bean?
换句话说:使用<component-scan>是否一定需要使用@Autowired,如果不是,如何完成@Required属性的注入?
顺便说一句,我希望 Spring component-scan without autowiring? 能回答我的问题,但答案假定“客户端”(我的场景中的控制器)本身没有被注释为任何类型的 @Component。
【问题讨论】:
-
“手动注入”是什么意思?构造函数和字段注入不会做你需要的吗?
-
避免自动装配的唯一方法是通过构造函数/设置器注入使用 Spring Context 文件 xml。
-
据我了解,您希望作为@Controller 扫描的结果创建实例,但同时您希望在控制器上使用
<property name="whatever" ref="someWhateverInstance" />。我不认为这是可能的。你不喜欢@Autowired或任何其他形式的自动装配(在注入依赖项时意味着 Java 配置)? -
如果您提供有关“出于各种原因我需要/更喜欢显式注入控制器需要的 bean”的更多详细信息,我相信 Spring 会提供一些适合您的解决方案无 xml(并带有 Java 配置)。例如,您可以使用
@Qualifier或@Resource而不是@Autowired。 -
我一般不喜欢自动装配,但对在这里的宗教辩论不感兴趣。可以这么说,在我现在谈论的特定场景中,通过
<component-scan>发现了很多控制器(和其他组件),完全放弃它将是一项很大的工作。我正在寻找一种解决方案,可以让我有选择地从其中一组中删除自动装配。 (不幸的是,我想要这样做的那些并不都在同一个包中)。
标签: spring