@ComponentScan默认是扫描当前包下的所有类(包括子包)
如下:
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
public class DemoApplication {
public static void main(String[] args) {
ConfigurableApplicationContext ctx = SpringApplication.run(DemoApplication.class, args);
String[] beanDefinitionNames = ctx.getBeanDefinitionNames();
for(String name : beanDefinitionNames){
System.out.println(name);
}
}
}
这里有2个bean
打印如下:
将
将
@Component
public class MyComponent {
}
改为:
public class MyComponent {
}
就不会被自动装配。
下面将component包放到外面后如下图:
就装配不了了。
但可以在@ComponentScan添加参数
如下代码:
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(basePackages = "cn.it1995")
public class DemoApplication {
public static void main(String[] args) {
ConfigurableApplicationContext ctx = SpringApplication.run(DemoApplication.class, args);
String[] beanDefinitionNames = ctx.getBeanDefinitionNames();
for(String name : beanDefinitionNames){
System.out.println(name);
}
}
}
就可以了!
或者用这种方式
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
@ComponentScan(basePackages = "cn.it1995.component")
public class DemoApplication {
public static void main(String[] args) {
ConfigurableApplicationContext ctx = SpringApplication.run(DemoApplication.class, args);
String[] beanDefinitionNames = ctx.getBeanDefinitionNames();
for(String name : beanDefinitionNames){
System.out.println(name);
}
}
}