普通类注入

只要是被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所支持的类型等同于模板配置类型,亦支持模板转化器,所以他在理论上支持所有类型…

转载请注明原地址: http://blog.noark.xyz/article/2018/7/15/noark入门之注入方式/