6

@Autowired是否可以在不使用组件扫描的情况下使用注释自动装配 bean ?

4

5 回答 5

4

是的。<context-component-scan .. />负责发现用@Component, @Controller, @Service,@Respository等注释的 bean。

为了处理注释(@Autowired,@Resource等),您需要<context:annotation-config />. 因此,注释在列出的 bean 上进行处理applicationContext.xml

据我所知,自动<context-component-scan .. />激活<context:annotation-config />

这适用于 spring 2.5 和 3.0。(感谢斯卡夫曼)

于 2010-03-17T03:53:06.470 回答
0

我从来没有尝试过不启用组件扫描,但是我可以确认 @Autowire 注释在 Spring 3.0.x 中有效,即使是通过 XML 定义的 bean。

于 2011-07-19T19:08:32.670 回答
0

当使用AnnotationConfigApplicationContext时,注解配置处理器总是被注册,这意味着在 @ComponentScan 级别禁用它们的任何尝试都将被忽略。

于 2020-01-03T05:52:20.850 回答
0

如果它的意思是你应该明确说明:
-<context:component-scan ...>在你的 xml 文件中(它启用<context:annotation-config />

- 在你的 java 配置中的 @ComponentScan

那么答案是 - 是的,可以在您的代码或 xml 文件中没有上述任何语句的情况下启用组件扫描。

另一种方法是使用AnnotationConfigApplicationContext

AnnotationConfigApplicationContext context= 
new AnnotationConfigApplicationContext("org.example.your.package");

其中“org.example.your.package”是您的原型注释类的包:@Component、@Repository、@Service 等。AnnotationConfigApplicationContext 将在基础包和内部包中搜索您的 bean。

于 2020-03-24T11:32:49.680 回答
0

@ComponentScan不,如果您使用基于 java 的配置(或)<context-component-scan .. />基于 xml 的配置,我们必须使用。

注意:如果您不使用任何方法,则不会在 AplicationContext 中创建相应的实例。

当您尝试访问资源(http://localhost:8080/customers)时,最终会得到

警告:在名称为“dispatcher”的 DispatcherServlet 中找不到带有 URI [/customers] 的 HTTP 请求的映射

于 2021-07-13T05:10:25.623 回答