title: Way to denote variables that are effectively final
body: <p>I am writing a class that needs to be thread safe. Following one of the principles of concurrent programming, I am trying to make my instance variables final where possible.</p>
  
  <p>The problem is that I often cannot use the final keyword due to the use of a DI framework (in this case, Spring). For e.g. any variable that is set in a method with the <code>@PostConstruct</code> annotation cannot be final. Also, any variable that has an <code>@Value</code> annotation cannot be final too.</p>
  
  <p>What I was hoping exists is an <code>@EffectivelyFinal</code> annotation. It is relatively trivial to create one that exists solely for documentation purposes with no functionality. However, I was hoping that a solution already exist where the annotation can fail the compiler if it detects that you are trying to assign a value to the variable after it has been assigned for the first time. </p>
  
  <p>Would anyone know if such a solution exists please?</p>