--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)
,
我说得对吗?
@ComponentScan
允许 spring 自动扫描带有 @Component
注释的所有组件。 Spring使用base-package属性,该属性指示在哪里可以找到组件。
@Configuration
带有 @Component
元注释,这标志着它符合类路径扫描的条件。
@Configuration
(AppConfig 类)在您使用时注册
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
@Bean
不需要@ComponentScan
,因为所有这些bean都是在spring遇到这个注解时显式创建的。
因为您使用的是@Bean注释而不是@Component