Skip to content

Commit

Permalink
Update 2019-06-09-springboot读取classpath文件踩坑两则.md
Browse files Browse the repository at this point in the history
  • Loading branch information
RTM945 authored Apr 23, 2024
1 parent 7155865 commit db0b840
Showing 1 changed file with 18 additions and 1 deletion.
19 changes: 18 additions & 1 deletion _posts/2019-06-09-springboot读取classpath文件踩坑两则.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,21 @@ for (Resource resource : resources) {
Class<?> clz = ClassUtils.forName(reader.getClassMetadata().getClassName(), loader);
}
{% endhighlight %}
参考[springboot源码](https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/liquibase/SpringPackageScanClassResolver.java)
参考[springboot源码](https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/liquibase/SpringPackageScanClassResolver.java)

---

## 2024-04-23 update
上述方法只能获取lib中的package下的class, 如果项目本体中有包名相同的则无法获取. (PS. 如果包名相同类目也相同, 本体的class会覆盖lib中的, 这个特性有时候很有用)

{% highlight java %}
// Guava 获取所有class 找特定package下的class
Set<? extends Class<?>> collect = ClassPath.from(ClassLoader.getSystemClassLoader())
.getAllClasses()
.stream()
.filter(clazz -> clazz.getPackageName()
.equalsIgnoreCase(packageName))
.map(clazz -> clazz.load())
.collect(Collectors.toSet());
// 有时候有需求将class实例化, 但有些class是抽象类等无法被实例化的类, 挨个儿做好try catch即可
{% highlight java %}

0 comments on commit db0b840

Please sign in to comment.