@Configuration 可以在没有 @componentScan 的情况下工作吗(Spring JavaConfig @annotaion)

问题描述 投票:0回答:2

--Appconfig.java

@Configuration
public class AppConfig {    

  @Bean(name="helloBean")
  public HelloWorld helloWorld() {
    return new HelloWorldImpl();
   }
}

--interface.java

public interface HelloWorld {
    void printHelloWorld(String msg);
} 

--ipml.java

public class HelloWorldImpl implements HelloWorld {
public void printHelloWorld(String msg) {
    System.out.println("Hello! : " + msg);
   --
}

--App.java

public class App {

public static void main(String[] args) {

    AnnotationConfigApplicationContext context = new 
    new AnnotationConfigApplicationContext(AppConfig.class);

HelloWorld obj = (HelloWorld) context.getBean(HelloWorldImpl.class);

obj.printHelloWorld("Spring3 Java Config");
   }
}

我的程序可以运行,但我的问题是为什么我不需要在 Appconfig.java 中添加

@componentScan

Spring 似乎可以在不使用

@Configuration
的情况下找到
@Bean
@componentScan

我想如果你想使用@annotation,你必须使用@componentScan或

context:component-scan(xml)
, 我说得对吗?

spring annotations spring-java-config
2个回答
6
投票

@ComponentScan
允许 spring 自动扫描带有
@Component
注释的所有组件。 Spring使用base-package属性,该属性指示在哪里可以找到组件。

@Configuration
带有
@Component
元注释,这标志着它符合类路径扫描的条件。

@Configuration
(AppConfig 类)在您使用时注册

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);

@Bean
不需要
@ComponentScan
,因为所有这些bean都是在spring遇到这个注解时显式创建的。


0
投票

因为您使用的是@Bean注释而不是@Component

© www.soinside.com 2019 - 2024. All rights reserved.