我正在创建一个插件系统,插件将从数据库中获取,我的实现如下
基本插件接口(interface)
@Service
public interface Plugin{
somemethod();
}
在插件包中加载所有插件,其中内部包名称将是插件名称和带有插件名称的类
package <>.plugin.Myplugin
import ....
@Service
class MyPlugin implements Plugin {
@Override
somemethod() {}
}
我正在依赖注入(inject)中加载Plugin接口(interface)的所有实现类
@Controller
public class MyCon {
private List<Plugin> plugins
public MyCon(List<Plugin> plugins) {
this.plugins = plugins;
}
ssomefuncitonality() {
String objectNeedOfClass = <CLASS_NAME>;
//Here
System.out.println(this.plugins);
}
}
这里可以看到列表中的所有对象,但是如何获取提供的类名的特定对象。
最佳答案
迭代列表并检查类名:
Optional<Plugin> plugin = this.plugins.stream()
.filter(p -> p.getClass().getSimpleName().equals(objectNeedOfClass))
.findFirst();
如果插件
可能很大并且您经常这样做,请在构造函数中构建一个 map :
private Map<String, Plugin> plugins
public MyCon(List<Plugin> plugins) {
this.plugins = plugins.stream().collect(Collectors.toMap(
p -> p.getClass().getSimpleName(), Function.identity()));
}
ssomefuncitonality() {
String objectNeedOfClass = ...;
Plugin plugin = this.plugins.get(objectNeedOfClass);
...
}
关于java - 如何从 Spring boot 依赖注入(inject)中的对象列表中查找特定的类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60963222/