如果构造函数中需要调用本类中的一个函数,而这个函数用到了本类中的@AutoWired。
这样会报错,spring 给出的建议是:使用构造函数时候建立依赖注入
public class PluginServiceImpl implements IPluginService {
/**
* 系统加载的所有插件的接入接口列表
*/
@Autowired
private List<IPluginAccess> plugins;
/**
* 系统加载的所有插件的信息列表
*/
private Map<String, PluginInfo> pluginInfoMap;
public PluginServiceImpl() {
pluginInfoMap = new HashMap<String, PluginInfo>();
// 初始化所有插件
initial();
}
/**
* 初始化
*/
public void initial() {
// 用到了plugins变量
plugins.xxxxxxxx;
}
修改之后
public class PluginServiceImpl implements IPluginService {
/**
* 系统加载的所有插件的接入接口列表
*/
private final List<IPluginAccess> plugins;
/**
* 系统加载的所有插件的信息列表
*/
private Map<String, PluginInfo> pluginInfoMap;
@Autowired
public PluginServiceImpl(List<IPluginAccess> plugins) {
this.plugins = plugins;
pluginInfoMap = new HashMap<String, PluginInfo>();
// 初始化所有插件
initial();
}
/**
* 初始化
*/
public void initial() {
// 用到了plugins变量
plugins.xxxxxxxx;
}