Skip to content

Commit

Permalink
文档和测试中也改用原生注解写法
Browse files Browse the repository at this point in the history
  • Loading branch information
Yurunsoft committed Nov 2, 2023
1 parent 99ed42b commit afade6d
Show file tree
Hide file tree
Showing 60 changed files with 450 additions and 399 deletions.
8 changes: 1 addition & 7 deletions doc/annotations/annotation.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,6 @@ use Imi\Bean\Annotation\Parser;

/**
* 示例注解
* @Annotation
* @Target("METHOD")
*
* // 下面是IDE提示注释
* @property string $name 随便定义的属性
Expand Down Expand Up @@ -64,11 +62,7 @@ class MyAnnotation extends Base

写在类上的:

`@Annotation`注解,表示当前类是注解类。

`@Target`注解,表示当前注解可以写在什么上面。可选:`CLASS``METHOD``PROPERTY``CONST`。支持传多个的写法:`@Target({"CLASS", "METHOD", "PROPERTY", "CONST"})`

`@Parser`注解,指定扫描注解时候的处理器,可以不写该注解,或者填写`"\Imi\Bean\Parser\NullParser"`即可,详见下文[编写处理器](#编写处理器)
`Parser`注解,指定扫描注解时候的处理器,可以不写该注解,或者填写`"\Imi\Bean\Parser\NullParser"`即可,详见下文[编写处理器](#编写处理器)

## 注解使用

Expand Down
4 changes: 2 additions & 2 deletions doc/annotations/filterArg.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ imi 框架的方法参数过滤器是一种方便开发者在框架层面对方

## 注解说明

### @FilterArg
### FilterArg

| 属性名称 | 说明 |
| ------------ | ------------
Expand All @@ -31,7 +31,7 @@ $obj->test('{"id":1, "message": "imi nb!"}');

复杂用法:

结合`@Callback``@Inject`注解使用,支持使用`bean`中的方法。
结合`Callback``Inject`注解使用,支持使用`bean`中的方法。

```php
#[Bean(name: 'XXX')]
Expand Down
22 changes: 11 additions & 11 deletions doc/annotations/injectValue.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

## 注解说明

### @ConstValue
### ConstValue

从常量中读取值

Expand All @@ -17,7 +17,7 @@
| name | 常量名 |
| default | 常量不存在时,返回的默认值 |

### @ConfigValue
### ConfigValue

从配置中读取值

Expand All @@ -26,7 +26,7 @@
| name | 配置名,支持`@app``@currentServer`等用法 |
| default | 配置不存在时,返回的默认值 |

### @EnvValue
### EnvValue

从环境变量中读取值

Expand All @@ -35,7 +35,7 @@
| name | 环境变量名称 |
| default | 配置不存在时,返回的默认值 |

### @Inject
### Inject

对象注入,使用:`App::getBean()`

Expand All @@ -44,19 +44,19 @@
| name | Bean名称或类名 |
| args | Bean实例化参数 |

### @RequestInject
### RequestInject

对象注入,使用:`RequestContext::getBean()`

`@Inject`
`Inject`

### @Callback
### Callback

回调注解

| 属性名称 | 说明 |
| ------------ | ------------
| class | 类名,或者传入对象,比如可以使用 `@Inject``@RequestInject` 再次值注入 |
| class | 类名,或者传入对象,比如可以使用 `Inject``RequestInject` 再次值注入 |
| method | 方法名 |

## 用法示例
Expand All @@ -65,7 +65,7 @@
#[Cacheable(key: 'index:{page}', ttl: 10, lockable: new Lockable(id: 'index:{page}', waitTimeout: 999999), preventBreakdown: true)]
```

### @DbInject
### DbInject

注入数据库对象

Expand All @@ -74,15 +74,15 @@
| name | 连接池名,如果为`null`则取配置`@app.db.defaultPool` |
| queryType | 查询类型,影响读写分离逻辑。可选:`QueryType::READ`/`QueryType::WRITE`,默认为`QueryType::WRITE` |

### @RedisInject
### RedisInject

注入Redis对象

| 属性名称 | 说明 |
| ------------ | ------------
| name | 连接池名,如果为`null`则取配置`@app.redis.defaultPool` |

### @PoolResource
### PoolResource

注入连接池资源

Expand Down
2 changes: 2 additions & 0 deletions doc/base/version/2.1-3.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ return [

* `psr/http-message` 版本升级,请求和响应相关类的类型声明有改动

* 重构注解类写法

### imi-access-control

废弃并移出主仓库,代码仓库:<https://github.com/imiphp/imi-access-control>
Expand Down
26 changes: 13 additions & 13 deletions doc/components/aop/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,37 +101,37 @@ ANNOTATION_CONSTRUCT | 带有注解的类的构造方法 | 4

imi 支持的通知点有:

#### @Before
#### Before

前置操作,注意与`@Around`区别。
前置操作,注意与`Around`区别。

#### @After
#### After

后置操作

#### @Around
#### Around

环绕操作。先触发环绕操作,在前置操作前和后置操作后,都可以做一些事情。

`@Before`区别:`@Around`先于`@Before`执行,并可以完全不让原方法运行,可用于请求拦截等操作。
`Before`区别:`Around`先于`Before`执行,并可以完全不让原方法运行,可用于请求拦截等操作。

#### @AfterReturning
#### AfterReturning

在原方法返回后触发,可以修改返回值

#### @AfterThrowing
#### AfterThrowing

在抛出异常后触发,允许设置`allow``deny`,设置允许和拒绝捕获的异常类

## 通知执行顺序

### 正常执行时

@Around@Before`$joinPoint->proceed()`@After@AfterReturning@Around
Around → Before → `$joinPoint->proceed()`→ After → AfterReturning → Around

### 有异常抛出时

@Around@Before → 抛出异常 → @AfterThrowing
Around → Before → 抛出异常 → AfterThrowing

## 使用方法

Expand Down Expand Up @@ -179,11 +179,11 @@ after Imi\Swoole\Redis\Pool\CoroutineRedisPool::release(): 1/1

类名、方法名和命名空间没有要求。

类注释中必须写`@Aspect`表明是一个切面类
类注释中必须写`Aspect`表明是一个切面类

方法中写`@PointCut`表示指定切入点,支持通配符
方法中写`PointCut`表示指定切入点,支持通配符

`@After`代表在该方法调用后触发
`After`代表在该方法调用后触发

### 注入带有注解的方法

Expand Down Expand Up @@ -368,7 +368,7 @@ class Test

### 属性注入

如下代码例子,定义一个类,使用`@Inject`注解来注释属性,在通过`getBean()`实例化时,会自动给被注释的属性赋值相应的实例对象。
如下代码例子,定义一个类,使用`Inject`注解来注释属性,在通过`getBean()`实例化时,会自动给被注释的属性赋值相应的实例对象。

```php
namespace Test;
Expand Down
16 changes: 8 additions & 8 deletions doc/components/async/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,33 +8,33 @@ imi v2.0.7 起开始支持在方法上声明注解,让这个方法可以以异
## 注解

### @Async
### Async

imi v2.0.7 支持在方法上使用 `@Async` 注解,让这个方法被正常调用时是异步调用。
imi v2.0.7 支持在方法上使用 `Async` 注解,让这个方法被正常调用时是异步调用。

`@Async` 注解类:`\Imi\Async\Annotation\Async`
`Async` 注解类:`\Imi\Async\Annotation\Async`

在 Swoole 下,方法被调用时,会立即创建一个协程并执行,只有协程挂起时,才会继续执行当前代码。

### @Defer
### Defer

imi v2.1.45 起支持。

`@Defer` 注解类:`\Imi\Async\Annotation\Defer`
`Defer` 注解类:`\Imi\Async\Annotation\Defer`

在 Swoole 下,会在协程关闭之前 (即协程函数执行完毕时) 进行调用,就算抛出了异常,已注册的 `defer` 也会被执行。

### @DeferAsync
### DeferAsync

imi v2.1.45 起支持。

`@DeferAsync` 注解类:`\Imi\Async\Annotation\DeferAsync`
`DeferAsync` 注解类:`\Imi\Async\Annotation\DeferAsync`

在 Swoole 下,会在协程关闭之前 (即协程函数执行完毕时) 进行调用,调用时会创建一个协程并立即执行,代码所在上下文是一个新的协程。

## 使用示例

`@Async``@Defer``@DeferAsync` 的使用方法完全一致,仅执行顺序不同。
`Async``Defer``DeferAsync` 的使用方法完全一致,仅执行顺序不同。

### 异步执行无返回值

Expand Down
32 changes: 24 additions & 8 deletions doc/components/cache/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,15 +94,23 @@ Imi\Cache\CacheManager::clear('缓存名称');

首先来认识一下 `imi` 中的缓存注解吧!

### @Cacheable
### Cacheable

调用方法前检测是否存在缓存,如果存在直接返回;不存在则执行方法体,然后将返回值存入缓存

**用法:**

基本用法:

`@Cacheable(name="缓存器名,为null则取cache.default配置", key="缓存键名,支持{id}、{data.name}、{:args}(所有参数的hash值)形式,代入参数,如果为null,则使用类名+方法名+全部参数,序列化后hash", ttl="超时时间,单位秒", lockable="Lock 注解,在调用方法体前后加锁", hashMethod="md5")`
```php
#[Cacheable(
name: '', // 缓存器名,为null则取cache.default配置
key: '', // 缓存键名,支持{id}、{data.name}、{:args}(所有参数的hash值)形式,代入参数,如果为null,则使用类名+方法名+全部参数,序列化后hash
ttl: 60, // 超时时间,单位秒
lockable: new Lockable(id: 'index:{page}', waitTimeout: 999999), // Lock 注解,在调用方法体前后加锁
hashMethod: 'md5' // 哈希方法
)]
```

防止缓存击穿:

Expand All @@ -116,33 +124,41 @@ Imi\Cache\CacheManager::clear('缓存名称');

如果 `preventBreakdown` 设为 `true`,并且`lockable`中也设定了`afterLock`,优先级为:`afterLock > 缓存检测`

### @CacheEvict
### CacheEvict

缓存驱逐注解,方法体执行时,将指定缓存清除

**用法:**

在方法执行前删除缓存:

`@CacheEvict(name="同上", key="同上", beforeInvocation=true, hashMethod="md5")`
```php
#[CacheEvict(name: '同上', key: '同上', beforeInvocation: true, hashMethod: 'md5')]
```

在方法执行后删除缓存:

`@CacheEvict(name="同上", key="同上", hashMethod="md5")`
```php
#[CacheEvict(name: '同上', key: '同上', hashMethod: 'md5')]
```

### @CachePut
### CachePut

方法体执行后,将返回值存入缓存

**用法:**

将方法返回值全部写入缓存:

`@CachePut(name="同上", key="同上", ttl="同上", hashMethod="md5")`
```php
#[CachePut(name: '同上', key: '同上', ttl: 60, hashMethod: 'md5')]
```

将方法返回值的一部分写入缓存:

`@CachePut(name="同上", key="同上", ttl="同上", value="a.b", hashMethod="md5")`
```php
#[CachePut(name: '同上', key: '同上', ttl: 60, value: 'a.b', hashMethod: 'md5')]
```

上面的注解,如果方法返回值为:

Expand Down
32 changes: 24 additions & 8 deletions doc/components/db/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -259,13 +259,18 @@ Db::getInstance()->rollBack();

**自动事务处理:**

`@Transaction` 注解,类:`Imi\Db\Annotation\Transaction`
`Transaction` 注解,类:`Imi\Db\Annotation\Transaction`

这个注解可以加在任意方法上,在方法调用前开启事务,在方法中抛出异常时回滚事务,方法成功返回时提交事务。

`@Transaction`

`@Transaction(autoCommit="自动提交事务true/false,默认为true")`
```php
#[
Transaction, // 默认
Transaction(
autoCommit: true, // 自动提交事务,默认 true
)
]
```

例:

Expand All @@ -283,19 +288,30 @@ public function create()

* 如果当前不在事务中则开启事务(默认)

`@Transaction(type=TransactionType::AUTO)`
```php
#[Transaction(type: TransactionType::AUTO)]
```

* 事务嵌套

`@Transaction(type=TransactionType::NESTING)`
```php
#[Transaction(type: TransactionType::NESTING)]
```

* 该方法必须在事务中被调用

`@Transaction(type=TransactionType::REQUIREMENT)`
```php
#[Transaction(type: TransactionType::REQUIREMENT)]
```

**部分回滚:**

`@Transaction(rollbackType=RollbackType::PART, rollbackLevels="回滚层数,默认为1;当 $rollbackType 为 RollbackType::PART 时有效。设为null则全部回滚")`
```php
#[Transaction(
rollbackType: RollbackType::PART,
rollbackLevels: 1 // 回滚层数,默认为1;当 $rollbackType 为 RollbackType::PART 时有效。设为null则全部回滚
)]
```

**事务监听:**

Expand Down
4 changes: 2 additions & 2 deletions doc/components/event/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ class Init implements IEventListener

类必须实现`IEventListener`接口和`public function handle(EventParam $e): void`方法。

然后在类上写`@Listener`注解。
然后在类上写`Listener`注解。

**注解参数说明:**

Expand Down Expand Up @@ -137,7 +137,7 @@ class BeforeRequest implements IRequestEventListener

类必须实现对应接口和`handle()`方法,每个类的事件定义不同。

然后在类上写`@ClassEventListener`注解。注解参数如下:
然后在类上写`ClassEventListener`注解。注解参数如下:

* `className`类名
* `eventName`要监听的事件名称
Expand Down
Loading

0 comments on commit afade6d

Please sign in to comment.