自定义springboot的starter很简单
首先写一个自己的处理类DemoConfig
然后在resources下创建META-INF/spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
*.DemoConfig
就这样配置然后作为一个starter的jar发布到maven仓库中,然后其它的应用就可以引入这个starter工作了,系统run的时候这个starter的DemoConfig里边的资源就会被加载开始工作。
应用场景
公共安全包开发、sso的令牌处理、swagger的文档自动化生成等等可以不依赖于业务代码的工作大部分都可以抽象成starter。
好处
工作类库中可以提供了一系列 starter 的 buff,当开发一个新的应用的时候,我们仅需要把当前有的buff直接给加上,然后在此基础上实现业务即可。可以提高开发效率,降低开发成本,不需要再重复的制造轮子
源代码
下面是加载starter中资源的代码
class SpringFactoriesLoader
public static final String FACTORIES_RESOURCE_LOCATION = "META-INF/spring.factories";
public static List<String> loadFactoryNames(Class<?> factoryClass, ClassLoader classLoader) {
String factoryClassName = factoryClass.getName();
try {
Enumeration<URL> urls = (classLoader != null ? classLoader.getResources(FACTORIES_RESOURCE_LOCATION) :
ClassLoader.getSystemResources(FACTORIES_RESOURCE_LOCATION));
List<String> result = new ArrayList<String>();
while (urls.hasMoreElements()) {
URL url = urls.nextElement();
Properties properties = PropertiesLoaderUtils.loadProperties(new UrlResource(url));
String factoryClassNames = properties.getProperty(factoryClassName);
result.addAll(Arrays.asList(StringUtils.commaDelimitedListToStringArray(factoryClassNames)));
}
return result;
}
catch (IOException ex) {
throw new IllegalArgumentException("Unable to load [" + factoryClass.getName() +
"] factories from location [" + FACTORIES_RESOURCE_LOCATION + "]", ex);
}
}