My apps commonly have one or more prop holders. These holders contain config data used in the app such as:
@Component
@ConfigurationProperties(prefix="app.orders")
@Data //lombok
public class OrderProps {
private int maxItems;
// other order props
}
Various components that use one or more of these props get injected with the prop holder:
@Service
public class OrderService {
private int maxSize;
public OrderService(OrderProps props) {
maxSize = props.getMaxSize();
}
}
In this example, OrderService
is only dependent on maxSize. Other classes may have also a varying number of properties needed from OrderProps
.
Doesn't injecting @ConfigurationProperties classes violate the Law of Demeter. Specifically, doesn't it mask the real dependency (in this case an int) as described here?
Is there way to design without violating? Littering code with @Value("${order.maxItems}")
or perhaps less problematic @Value("#{orderProps.maxItems}")
seems to have its own set of problems especially when refactoring / maintenance.