Annotations do not have a performance win... **unless** they are used by a code generation step to inject code for you ([article][1]). Where Annotations do have a definite win is with the concept of **auto-configuration**, which is the first killer feature exploited by Spring and similar frameworks. Annotations improve over the prior legacy solutions: * Marker interfaces--requires a class to "implement" an interface without any methods defined. Used for reflection based configuration in the past. * Configuration files--requires the user to know the fully qualified class names. This is what Spring configuration used to look like, along with Enterprise JavaBeans (EJB). * Javadoc plugins--before annotations were officially implemented, some esoteric programs used the `javadoc` tool to do what annotations do now. The chief downside is that javadoc markers cannot be reflected at runtime, and you have to use another tool to preprocess your source code before compiling. There may have been others, but these are the three legacy solutions I am personally familiar with. Annotations are a set of tools that can enable solutions without being overly invasive to your code. [1]: https://medium.com/@iammert/annotation-processing-dont-repeat-yourself-generate-your-code-8425e60c6657