普通类注入
只要是被IOC容器接管的类可以当作属性注入.
@Autowired
private VipService vipService;
接口注入
如果有被IOC容器接管的类实现了此接口,也可以作属性一样注入实现类.
@Autowired
private VipExportService vipExportService;
List注入
如果有多个实现,又要注入全部实现,那就使用List注入的方式吧...
@Order(100)
@Component(name = { "@gm add ?", "@gm add help" })
public class AddHelpCommand implements GmCommand {
@Autowired
private List<AbstractAddCommand> commands;
@Override
public String help() {
StringBuilder sb = new StringBuilder();
commands.forEach(v -> sb.append(v.help()).append("\n"));
return sb.toString();
}
@Override
public void exec(long playerId, String... args) {}
}
又是一个无理又很现实的需求,添加命令要获得所有添加系列的命令,构建添加系列的帮助文档...
如果List有排序需求,请参考@Order注解...
Map注入
在上面的命令中发现了@Component注解是有名称的,那是不是能实现Map的方式注入,还真可以...
@Autowired
private Map<String, GmCommand> commands;
常规就是一个名称,如果有需要多个名称,功能相同别命而已,请随便...
@Component(name = "@gm reload")
public class ReloadCommand implements GmCommand {}
如果是注入配置文件中的参数呢
请参考@Value注解,如果配置不存在则使用属性的默认值.
@Value("template.path")
private String templatePath;
@Value所支持的类型等同于模板配置类型,亦支持模板转化器,所以他在理论上支持所有类型...