首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对控制器使用<component-scan>而不使用@Autowired?

如何对控制器使用<component-scan>而不使用@Autowired?
EN

Stack Overflow用户
提问于 2014-08-18 21:13:47
回答 2查看 834关注 0票数 0

在使用<component-scan>自动检测和创建@Controller bean的上下文配置中,我希望避免对控制器属性使用@Autowired注释(出于各种原因,我需要/宁愿显式注入控制器所需的bean)。控制器的属性设置器标记为@Required。在这种情况下,如何声明要注入控制器的bean?

换句话说:<component-scan>的使用是否必然需要使用@Autowired,如果没有,如何完成@Required属性的注入?

顺便说一句,我希望弹簧元件-没有自动装配的扫描?能够回答我的问题,但是答案假设“客户端”(我的场景中的控制器)没有被注释为任何类型的@Component本身。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-20 06:13:26

我不认为您可以保留组件扫描,同时手动连接(在XML中)组件扫描bean的依赖关系。

如果使用组件扫描,则告诉Spring创建bean实例。如果在xml中定义bean,则告诉Spring创建bean实例。如果两种方式都这样做,就会得到两个bean实例。您想要的是当Spring看到@Controller注释时创建bean,然后转到xml并查看它有哪些依赖项。那么,如果仍然使用xml中的bean进行操作,那么首先进行组件扫描又有什么意义呢?!

如果您想要选择性组件扫描(这与自动装配不同),那么您有相当少的选择。参考文档中的这一节很好地描述了它们。

票数 1
EN

Stack Overflow用户

发布于 2014-08-20 05:26:03

在您的情况下,您可以逐步远离组件扫描,使用注释过滤器来排除您想要手工连接的控制器。例如,您可以定义一个@NotAutowired注释来标记要排除的控制器。然后定义组件扫描排除筛选器:

代码语言:javascript
复制
@ComponentScan(basePackages = {"app.controller"},
               excludeFilters = @ComponentScan.Filter(
                          value= NotAutowired.class, 
                          type = FilterType.ANNOTATION)
)

或者您可以简单地将控制器移动到另一个包中。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25372129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档