交流
商城
MCN
登入
注册
首页
提问
分享
讨论
建议
公告
动态
发表新帖
发表新帖
第2 章:ApplicationArguments
分享
未结
0
830
李延
LV6
2021-05-20
悬赏:20积分
## 作用 封装传入的参数,并且解析以 -- 开头的键值对参数。 ## 子类 DefaultApplicationArguments ## 主要方法 再这个子类中,有两个成员变量: ```java private final Source source; private final String[] args; ``` args就是传入的参数,而source则是这个类的子类,并且几乎所以方法的实现都是委托给它的。 我们继续看一下source对象 ```java private static class Source extends SimpleCommandLinePropertySource { Source(String[] args) { super(args); } @Override public List<String> getNonOptionArgs() { return super.getNonOptionArgs(); } @Override public List<String> getOptionValues(String name) { return super.getOptionValues(name); } } ``` 在构造函数中调用了父类 ```java public SimpleCommandLinePropertySource(String... args) { super(new SimpleCommandLineArgsParser().parse(args)); } ``` 通过SimpleCommandLineArgsParser的parse方法解析参数。我们继续看一下这个方法 ```java public CommandLineArgs parse(String... args) { CommandLineArgs commandLineArgs = new CommandLineArgs(); for (String arg : args) { if (arg.startsWith("--")) { String optionText = arg.substring(2); String optionName; String optionValue = null; int indexOfEqualsSign = optionText.indexOf('='); if (indexOfEqualsSign > -1) { optionName = optionText.substring(0, indexOfEqualsSign); optionValue = optionText.substring(indexOfEqualsSign + 1); } else { optionName = optionText; } if (optionName.isEmpty()) { throw new IllegalArgumentException("Invalid argument syntax: " + arg); } commandLineArgs.addOptionArg(optionName, optionValue); } else { commandLineArgs.addNonOptionArg(arg); } } return commandLineArgs; } ``` 代码很简单,循环所有的参数,如果以--开头。并且包含=。说明就是键值对,进行解析后保存到addOptionArg中,否则就是普通参数,报错到addNonOptionArg中。
回帖
消灭零回复
提交回复
热议榜
java 相关知识分享
8
好的程序员与不好的程序员
6
写给工程师的十条精进原则
5
spring boot以jar包运行配置的logback日志文件没生成
5
一步一步分析SpringBoot启动源码(一)
5
MockMvc测试
5
【吐槽向】是不是有个吐槽的板块比较好玩
4
logstash jdbc同步mysql多表数据到elasticsearch
3
IntelliJ IDEA 优质License Server
3
.gitignore忽略规则
3
SpringBoot启动源码分析
3
一步一步分析SpringBoot启动源码(三)
3
2
一步一步分析SpringBoot启动源码(二)
2
积分不够将无法发表新帖
2
官方产品
Meta-Boot - 基于MCN
MCN - 快速构建SpringBoot应用
微信扫码关注公众号