
# Type conversion

Type conversion turns a value of one type into another, mostly the text of a config file into the type a bean wants.

## Why use it

Settings are text: `server.port=8080`, `timeout=10s`, `max-upload=10MB`. Beans want an `int`, a `Duration`, a `DataSize`, an enum or a list. A conversion service does this for `@Value`, `Environment.getPropertyAs<T>` and `@ConfigurationProperties` binding, so you rarely call it yourself.

You deal with conversion directly in two cases: to teach the framework a type of your own (a `conversionService` bean), or to convert values in your own code.

## Example

```properties
# lib/resources/application.properties
shop.timeout=30s
shop.max-upload=10MB
shop.ports=8080,8081
```

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

@Service()
class Uploads {
  Uploads(
    @Value(r'${shop.timeout}') this.timeout, // Duration(seconds: 30)
    @Value(r'${shop.max-upload}') this.maxUpload, // 10485760 bytes
    @Value(r'${shop.ports}') this.ports, // [8080, 8081]
  );

  final Duration timeout;
  final DataSize maxUpload;
  final List<int> ports;
}
```

## Pages

- [ConversionService](conversion-service.md): the service, the default converters, and how to add your own.
- [DataSize](data-size.md): sizes such as `10MB`, in powers of 1024.
- [Durations](durations.md): `10s` and `PT10S`, `DurationStyle` and `ChronoUnit`.

## See also

- [@Value](../config/value.md)
- [Environment](../config/environment.md)
- [@ConfigurationProperties](../config/configuration-properties.md)
