
# spring_core_dart

Spring for Dart の中核となるパッケージです。クラスをアノテーションで Bean
として宣言すると、コンテナがそれらを生成し、互いに結び付け、設定します。結び付けのコードはビルド時に
`spring_core_dart_generator` が書き出すため、実行時にリフレクションで検索することはありません。

```yaml
dependencies:
  spring_core_dart: ^0.7.1

dev_dependencies:
  build_runner: ^2.17.0
  spring_core_dart_generator: ^0.7.1
```

```dart
import 'package:spring_core_dart/spring_core_dart.dart';

import 'main.spring.dart';

@Service()
class Greeter {
  Greeter(@Value(r'${greeting:Hello}') this.greeting);

  final String greeting;
}

@ComponentScan()
final BeanModule appBeans = $appBeans;

const log = SpringLog('app');

void main() {
  final context = ApplicationContext.run([appBeans]);
  log.info(context.getBean<Greeter>().greeting);
  context.close();
}
```

`main.spring.dart` を書き出すには、最初に一度、そしてアノテーションを変更するたびに
`dart run build_runner build` を実行します。

## 内容

- [コンテナと Bean](beans/index.md): Bean を宣言し、注入し、ライフサイクルを管理するアノテーションと、それらを動かすコンテキスト。
- [設定](config/index.md): プロパティ、YAML、環境変数、コマンドラインからの値。プロファイル。型付きの設定。
- [イベント](events/index.md): イベントを発行し、同期的または非同期に受け取る Bean。
- [メッセージ](messages/index.md): 引数付きの多言語テキスト。
- [リソース](resources/index.md): ファイル、アセット、URL をひとつのインターフェースで扱います。パスパターン。
- [型変換](conversion/index.md): 文字列から数値、期間、サイズ、独自の型への変換。
- [ロギング](logging/index.md): `SpringLog`、ログレベル、行の書式。
- [式 (SpEL)](spel/index.md): アノテーションとコードの中の `#{...}` 式。
- [JSON](json/index.md): アノテーションによるオブジェクトと JSON の相互変換。
- [バリデーション](validation/index.md): フィールドと引数の制約、そしてバリデーター。
- [アスペクト (AOP)](aop/index.md): Bean のメソッドの前後で実行されるコード。

## ライブラリ

`package:spring_core_dart/spring_core_dart.dart` はすべてをエクスポートします。一部だけが必要なライブラリは、
`core.dart`、`beans.dart`、`context.dart`、`expression.dart`、`json.dart`、`validation.dart`、`aop.dart`
を個別にインポートできます。Jakarta の名前 (`@Inject`、`@Named`) は `jakarta.dart` にあります。
