title: Optimal @EnableTransactionManagement Configuration
body: <p>I'm pretty confused by this topic and see very little advice in the Spring 4.x documentation. First off let me state that I can configure my project any way I want. Static weaving, compile time weaving, none, etc. </p>
  
  <p>I just want the optimal performance. But if the performance differences are microseconds then I just want simplest. I only care about a performance difference that would impact my customers. </p>
  
  <p>Okay, so here are the relevant options:</p>
  
  <ol>
  <li>adviceMode=proxy, proxyTargetClass=true</li>
  <li>adviceMode=proxy, proxyTargetClass=false</li>
  <li>adviceMode=aspectJ, compile-time weaving</li>
  <li>adviceMode=aspectJ, load-time weaving</li>
  </ol>
  
  <p>I'm okay with adding some time to my application initialization as long as it is fast while running. </p>
  
  <p>So what are the trade offs between these four ways of configuring transaction management? </p>
  
  <p>Are there feature trade-offs too or is this just a performance issue? </p>
  
  <p>Note that I am using Spring 4.0.2 and Java 1.7. If there is Spring 4.0 documentation that basically answers this question then I apologize and just redirect me to the doc. So far I've seen documentation saying how to set them up but not how they compare. Thanks!</p>
  
  <p>Also note that most of the information on the web about this is really out of date. So I'm looking for current comparisons.</p>