7

Is annotation processing still an active part of Java 6+, or is it something that has been deprecated/discouraged/obsolesced. If obsolesced, why (why is it no longer needed/useful)? And if it's still extremely useful and "active" (a new Java project developing against the Java 6+ JDK would still benefit from it), please confirm/correct my understanding of how annotation processors are used:

  1. You create your own annotation class, say @MyAnnotation
  2. You mark certain classes, methods, fields, etc. with @MyAnnotation
  3. During the build process, you invoke your custom MyAnnotationProcessor (how?)
  4. The processor scans your classpath for instances of @MyAnnotation
  5. Typically, an annotation processor does dynamic bytecode injection, modifying/enhancing your compiled classes on-the-fly
7
  • 8
    What ever gave you the notion that it's deprecated? Commented Jan 28, 2013 at 19:02
  • 1
    annotations are available since java 5, it would be quite a poor design decision, if they would deprecate them in the next major release of the platform Commented Jan 28, 2013 at 19:08
  • Unless you are building a utility library (like Spring), you do not need to create annotations. That does not mean that there is no use for annotations, just that you (most java developers) will not need to develop annotations. Commented Jan 28, 2013 at 19:14
  • Everybody - thanks! Is my understanding of their basic usage (the steps outlined above) correct, or am I way off base? Commented Jan 28, 2013 at 19:17
  • 1
    You can also use Annotations at runtime. See here for an example: kodejava.org/examples/503.html Commented Jan 28, 2013 at 21:15

1 Answer 1

16
  1. Correct.
  2. Correct.
  3. Correct. Typically you will extend AbstractProcessor. You specify your MyAnnotationProcessor class using the ServiceLoader pattern - this makes it discoverable to the compiler. The Processor Javadoc contains some information on creating this class.
  4. Correct.
  5. This part is not correct. The annotation processor framework does not give you the ability to modify classes. You will need to use some post-compile process to do this as part of your build. What it does allow you to do is create new files. These may be simple resources, new Java source files (that will subsequently be required and eligible to the annotation processor during the same compile), or Java class files. You may also perform custom checks on source code and write errors to the log (causing the compile to fail).

I hope that addresses your understanding questions.

Sign up to request clarification or add additional context in comments.

1 Comment

Also, I found this article a decent introduction to writing annotation processors: deors.wordpress.com/2011/10/08/annotation-processors .

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.