自己开发一个jar,想给其他项目直接调用。
都是springboot工程,jar包里有有些类带了spring的注解,系统能被加载到spring中。
之前也这样用过,没有发现什么问题,这次发现pom引用了,程序中编译也没有问题,但是springboot启动以后不加载。jar中的bean。
最后找到了问题的根本原因:
SpringBootApplication启动时会默认扫描主类当前包及子包,之前之所以成功了,是因为恰巧引用的包 package路径一样。
那么如何让spring扫描主类当前包外的其他包呢?
Class<?>[] exclude() default {};
String[] excludeName() default {};
String[] scanBasePackages() default {};
Class<?>[] scanBasePackageClasses() default {};
这一组属性可以扫描主类当前包外的其他包或不扫描当前包下的特定包或类。
例如:
@SpringBootApplication(excludeName=("com.tt.service.UserService"), scanBasePackages=("com.tt"))
目前只要scanBasePackages就够用了。
网上查的时候看到 @EnableFeignClients 也有类似的属性,还没有用过。
String[] basePackages() default {};
Class<?>[] basePackageClasses() default {};
Class<?>[] defaultConfiguration() default {};
Class<?>[] clients() default {};
总结:@SpringBootApplicatoin是用的@ComponentScan扫描,扫描的是Component,包括@Component, @Controller, @Service, @Repository等,而@EnableFeignClients扫描的是@FeignClient,所以在指定扫描路径时要分别指定