@Configuration 可以在没有@componentScan 的情况下工作吗(Spring JavaConfig @annotaion)
Can @Configuration work without @componentScan (Spring JavaConfig @annotaion)
--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
。
似乎 @Configuration
和 @Bean
可以通过 Spring 找到而无需使用 @componentScan
。
我想如果你想使用@annotation,你必须使用@componentScan 或者
context:component-scan(xml)
,
我说得对吗?
@ComponentScan
允许 spring 自动扫描带有 @Component
注释的所有组件。 Spring 使用 base-package 属性,指示在哪里可以找到组件。
@Configuration
是用 @Component
注释的元数据,这标志着它有资格进行 class 路径扫描。
@Configuration
(AppConfig class) 在您使用
时注册
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
@Bean
不需要 @ComponentScan
因为所有这些 bean 都是在 spring 遇到此注释时显式创建的。
--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
。
似乎 @Configuration
和 @Bean
可以通过 Spring 找到而无需使用 @componentScan
。
我想如果你想使用@annotation,你必须使用@componentScan 或者
context:component-scan(xml)
,
我说得对吗?
@ComponentScan
允许 spring 自动扫描带有 @Component
注释的所有组件。 Spring 使用 base-package 属性,指示在哪里可以找到组件。
@Configuration
是用 @Component
注释的元数据,这标志着它有资格进行 class 路径扫描。
@Configuration
(AppConfig class) 在您使用
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
@Bean
不需要 @ComponentScan
因为所有这些 bean 都是在 spring 遇到此注释时显式创建的。