-
Notifications
You must be signed in to change notification settings - Fork 41.4k
Description
Consider simple example:
@ConfigurationProperties("some.prefix")
@ConstructorBinding
class Props {
final List<String> strings;
public Props(List<String> strings) {
this.strings = strings;
}
}
Even though I'm trying to make immutable class here, Spring will unhelpfully inject mutable ArrayList
.
Now in a very simple example like this you can of course wrap it yourself in Collections.unmodifiableList()
but doing so quickly becomes tedious especially when you nest collection types.
Imagine the code to deeply freeze e.g. Map<String, List<String>>
:(
It's even worse when you just want to use lombok.Value
or maybe Kotlin (didn't check it) to avoid writing boilerplate completely.
Not sure why these property classes should ever be mutable but if desired one can add property to @ConfigurationProperties
to control it. It should automatically be enabled when using @ConstructorBinding
though as that's a sure sign someone is trying to make immutable properties.