# 注解配置
> 核心`1.8.0`增加了注解配置的形式,自此,已经基本趋向于摒弃代码配置的形式了。
注解配置存在两个主要注解:`@SimpleRobotApplication` 和 `@SimpleRobotConfiguration`
## **@SimpleRobotApplication**
这是最主要的注解,使用这个注解来标记一个类作为启动器的起始类,比如这样:
```java
@SimpleRobotApplication
public class Test1 {
// 啥也没有也无所谓
}
```
此注解存在两个参数:
| 参数名 | 类型 | 描述 | 默认值 |
| --- | --- | --- | --- |
| resources | String | 配置文件所在的resources文件路径 | "/simple-robot-conf.properties" |
| application | Class<? extends Application> | 所使用的真正启动器所处的class位置。如果指定了Application接口的类型本身,则说明直接使用当前标注了这个注解的类来生成代理。(此时不需要实现接口) | Application.class |
参数`resources`可以指定一个配置文件的文件相对路径,而关于配置文件的一些参数映射请参考[文件配置](./%E6%96%87%E4%BB%B6%E9%85%8D%E7%BD%AE.md) 。
参数`application`可以指定一个已经实现了`Application`接口,或者组件自行定义的一些`xxxApp`接口的启动器类。如果没有指定,则会默认使用当前类来进行启动。
## **@SimpleRobotConfiguration**
此注解可以用于启动器类上,来代替代码配置与一部分文件配置。
此注解仅存在一个参数:
| 参数名 | 类型 | 描述 | 默认值 |
| --- | --- | --- | --- |
| value | @ConfigurationProperty\[\] | 额外的配置信息。此信息会覆盖文件读取到的信息。 | {} |
上述参数类型中的`@ConfigurationProperty` 也是一个注解类型,此注解类型存在两个必填参数:
### **@ConfigurationProperty**
| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| key | String | 配置键 |
| value | String | 配置值 |
没错,这个注解的参数形式就是常见的`key-value`格式,此注解的`key`与`value`的参数与格式与文件配置一致。
它们是这么用的:
```java
@SimpleRobotApplication(resources = "/conf.properties")
@SimpleRobotConfiguration({
@ConfigurationProperty(key = "core.bots", value = ":http://47.100.38.59:8877"),
@ConfigurationProperty(key = "core.logLevel", value = "DEBUG"),
@ConfigurationProperty(key = "core.language", value = "zh_CN")
})
public class Test1 {
// TODO something..
}
```
上述示例中,其结果相当于读取一个内容如下的配置文件:
```properties
core.bots=:http://47.100.38.59:8877
core.logLevel=DEBUG
core.language=zh_CN
```
## **使用**
既然知道了注解的含义,那么写好了之后,怎么使用他们呢?
很简单,以前启动项目是使用的`XxxxApplication.run(new Test1())` 的形式,传入一个实例对象进行启动,而此时只需要将这个实例对象替换为`class`对象即可。举个例子:
>[success] 使用`CQ HTTP API`组件进行举例
```java
@SimpleRobotApplication(resources = "/conf.properties")
@SimpleRobotConfiguration({
@ConfigurationProperty(key = "core.bots", value = ":http://47.100.38.59:8877"),
@ConfigurationProperty(key = "core.logLevel", value = "DEBUG"),
@ConfigurationProperty(key = "core.language", value = "zh_CN")
})
public class Test1 {
public static void main(String[] args) throws NoSuchMethodException {
// 创建CQ HTTP API组件的项目启动器实例
CoolQHttpApplication application = new CoolQHttpApplication();
// 启动...
application.run(Test1.class, args);
}
}
```
## 判定逻辑
此处介绍注解启动的具体逻辑,以便理解并更好的使用。
当你使用了`XxxxxApplication.run(XXX.class, args)` 启动之后,其具体的判定逻辑如下:
### 1. **此类是否存在 `@SimpleRobotApplication` 注解?**
#### 1A. **不存在**
那么这个类必须是一个能够实例化的,并且实现了旧版本的`XxxApp`接口的类,并将其实例化,然后就会像以前一样,等同于`run(new Xxx(), args)`
#### 1B. **存在**
如果存在,则会获取`@SimpleRobotApplication`并判断是否需要读取配置文件,然后判断是否存在`application`参数,并指定一个真正的启动器所在类。(如果没有则指定当前类)
再判断是否存在`@SimpleRobotConfiguration`注解,如果存在,则会在文件配置读取后覆盖重复的数据。
再判断当前类或者`application`参数中提到的类是否是`Application<CONFIG>`接口的子类,如果是,则启动过程中依旧会执行其`before`和`after`。如果不是则不会获取实例。
- 前言
- 简单介绍
- 我该如何阅读文档
- 视频教程
- 安装与使用
- 开源协议
- 免责&捐助
- 注意事项
- 版本命名规则简介
- 主要功能版本历史
- 功能指引
- 通用API与功能
- 国际化语言
- 异常
- 消息监听
- @Listen
- @OnListen模板
- @Filter
- 消息参数截取
- @Spare
- @Constr
- @Ignore
- @ListenBreak
- @ListenBreakPlugin
- @ListenBody
- 监听响应
- 成功判定与返回值
- 监听上下文
- 动态参数
- 监听消息API
- 异步监听 @Async
- 限流监听 @Limit
- 自定义Http送信器
- 枚举与类型
- 送信器
- SENDER
- SETTER
- GETTER
- 返回值
- 其他位置
- 日志与日志拦截
- 异常处理
- 依赖注入
- 自定义依赖获取
- 批量依赖载入
- 注意事项
- 常量
- 定时任务
- 自定义过滤
- 拦截器
- 拦截器总定义
- 上下文对象总定义
- 监听消息拦截
- 送信器拦截
- 监听函数拦截
- CAT码
- CQ码
- CQCode
- CQ码工具类
- CQ扩展工具类
- AppendList拼接链
- 高级内容
- 阻断机制
- 截断机制
- 自定义枚举类型
- 枚举工厂
- byName注解
- 自定义注解
- 配置
- 文件配置
- 注解配置
- 参数配置
- 多配置
- 多账号
- 自定义账号管理器
- 小心!
- 核心版本与组件如何升级核心
- 核心版本迭代指南
- 核心
- 更新日志
- jar包与依赖
- 监听消息类结构图
- 快速启动
- 模组与扩展
- 模组开发
- 现有模组
- 通用模组-延时任务
- 通用模组-CQ码工具
- 转义器
- CQ码操作工具类
- CQ码模板-CodeTemplate
- CQ码载体-KQCode
- CQ码构建器
- MQ码工具类
- 通用模组-redis-bot管理器
- 通用模组-Debugger
- Debugger-common模块
- Debugger-server模块
- Debugger-client模块
- 通用模组-钉钉机器人
- 组件-Mirai(JVM)
- 快速开始(1.13+)
- springboot-starter
- 注意事项
- 配置
- 额外的内容
- 快速回复
- 额外监听
- CQ码解析
- 组件-酷Q(QQ)-CQ HTTP API(基本失效)
- 快速开始(推荐)
- 快速开始(1.7.x以下,不推荐)
- 快速开始(Springboot启动器)
- 启动器、启动接口与配置类
- 配置
- 文件配置
- 注意事项
- 更新日志
- 额外的内容
- 自定义额外监听
- CQ送信器
- 元事件
- 监听消息类结构图
- 组件-酷Q(QQ)-JCQ(失效)
- 快速开始
- 更新日志
- 额外的内容
- JCQ日志
- 配置
- 注意事项
- 监听消息类结构图
- 组件-酷Q(QQ)-HTTP TO CQ(失效)
- 快速开始(核心1.7.x及以下)
- 启动器、启动接口与配置类
- 配置
- 文件配置
- 注意事项
- 更新日志
- 监听消息类结构图
- 组件-酷Q(QQ)-LEMOC (失效)
- 快速开始(核心1.7.x及以下)
- 配置
- 注意事项
- 更新日志
- 监听消息类结构图
- Springboot快速启动器
- 常见问题汇总
- BUG反馈
- 更新计划总览