戴着假发的程序员出品 抖音ID:戴着假发的程序员 欢迎关注
[查看视频教程]
basePackageClasses 用来指定某个类所在包下的所有组件。springboot中的主应用类就是一个BasePackageClass。
看案例:
我们准备如下结构的类:
其中每个类源码:
Person类:在beans包下
1 /** 2 * @author 戴着假发的程序员 3 * 4 * @description 5 */ 6 @Component 7 public class Person { 8 public Person(){ 9 System.out.println("实例化Person类"); 10 } 11 }
Car类:在otherbeans包下:
1 /** 2 * @author 戴着假发的程序员 3 * 4 * @description 5 */ 6 @Component 7 public class Car { 8 public Car(){ 9 System.out.println("实例化Car类 "); 10 } 11 }
Truck类:在otherbeans包下:
1 /** 2 * @author 戴着假发的程序员 3 * 4 * @description 5 */ 6 @Component 7 public class Truck { 8 public Truck(){ 9 System.out.println("实例化Truck"); 10 } 11 }
Bus类:在otherbeans.pub包下
1 /** 2 * @author 戴着假发的程序员 3 * 4 * @description 5 */ 6 @Component 7 public class Bus { 8 public Bus(){ 9 System.out.println("实例化Bus"); 10 } 11 }
配置类,制定扫描beans包下的所有类,另外通过basePackageClasses指定Car.calss(这里注意basePackageClasses属性是一个数组,可以同时配置多个class)
1 /** 2 * @author 戴着假发的程序员 3 * 4 * @description 5 */ 6 @Configuration 7 @ComponentScan(basePackages = "com. st.dk.demo6.beans",basePackageClasses = Car.class) 8 public class AppConfig { 9 }
测试:
1 @Test 2 public void testBasePackageClasses(){ 3 ApplicationContext ac = 4 new AnnotationConfigApplicationContext(AppConfig.class); 5 }
结果:
我们会发现,spring不光帮我们加载了beans包下的Person类,而且同时加载了Car所在包下的Car和Truck类,而且加载Car所在包的子孙包下的Bus类。