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