Annotation processors were standardized in Java 6, but it wasn't until recently that they began gaining some popularity. In this talk, I will argue that they are a pretty nice form of compile-time metaprogramming, a facility which a lot of languages are sorely lacking. I will explain why it makes sense to write an annotation processor, show some real-world examples, both small and big, and then implement a simple yet useful annotation processor from scratch.