在使用<component-scan>自动检测和创建@Controller bean的上下文配置中,我希望避免对控制器属性使用@Autowired注释(出于各种原因,我需要/宁愿显式注入控制器所需的bean)。控制器的属性设置器标记为@Required。在这种情况下,如何声明要注入控制器的bean?
换句话说:<component-scan>的使用是否必然需要使用@Autowired,如果没有,如何完成@Required属性的注入?
顺便说一句,我希望弹簧元件-没有自动装配的扫描?能够回答我的问题,但是答案假设“客户端”(我的场景中的控制器)没有被注释为任何类型的@Component本身。
发布于 2014-08-20 06:13:26
我不认为您可以保留组件扫描,同时手动连接(在XML中)组件扫描bean的依赖关系。
如果使用组件扫描,则告诉Spring创建bean实例。如果在xml中定义bean,则告诉Spring创建bean实例。如果两种方式都这样做,就会得到两个bean实例。您想要的是当Spring看到@Controller注释时创建bean,然后转到xml并查看它有哪些依赖项。那么,如果仍然使用xml中的bean进行操作,那么首先进行组件扫描又有什么意义呢?!
如果您想要选择性组件扫描(这与自动装配不同),那么您有相当少的选择。参考文档中的这一节很好地描述了它们。
发布于 2014-08-20 05:26:03
在您的情况下,您可以逐步远离组件扫描,使用注释过滤器来排除您想要手工连接的控制器。例如,您可以定义一个@NotAutowired注释来标记要排除的控制器。然后定义组件扫描排除筛选器:
@ComponentScan(basePackages = {"app.controller"},
excludeFilters = @ComponentScan.Filter(
value= NotAutowired.class,
type = FilterType.ANNOTATION)
)或者您可以简单地将控制器移动到另一个包中。
https://stackoverflow.com/questions/25372129
复制相似问题