springboot启动的时候默认只扫描当前package下的类
如果想扫描jar中的类,并且该jar包提供了@Configuration组件给第三方项目使用
那么spring.factories便派上了用场。
我们来通过一个完整的实例、感受一下spring.factories的用处。
1、用idea新建一个工程
2、新建两个module
命名为module-1 module-2
同时删除src目录
此时的工程目录结构如下
module1 作为主项目使用。
我们现在module1中创建一个Controller
package sougit1.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class Test1Controller {
@RequestMapping("/test1")
public String test() {
return "test1";
}
}
然后在module2中也创建一个
package sougit1.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class Test2Controller {
@RequestMapping("/test2")
public String test() {
//加载jar
return "test2";
}
}
这个时候 我们启动module1中的 application
@SpringBootApplication
public class BootApplication {
public static void main(String[] args) {
args = new String[]{"--server.port=8083"};
SpringApplication.run(BootApplication.class, args);
}
}
发现只能访问到 http://localhost:8083/test1
如果在module1中添加一个
resources/META-INF/spring.factories 文件
内容如下
org.springframework.boot.autoconfigure.EnableAutoConfiguration=sougit2.Test2AutoConfiguration
在module2中创建一个sougit2.Test2AutoConfiguration
package sougit2;
import org.springframework.context.annotation.Bean;
import sougit2.controller.Test2Controller;
@org.springframework.boot.autoconfigure.AutoConfiguration
public class Test2AutoConfiguration {
@Bean
public Test2Controller createTest2Controller(){
return new Test2Controller();
}
}
这个时候再访问http://localhost:8083/test2
成功。
--------------------------------
文章校验码 【u41n】
请参考作者置顶的文章、或私信作者获取完整代码的Git地址。