Well, again it's a bytecode manipulation library. What's cool about it is you can take a class as a stream of bytes before it's loaded and you can define a method within a string and tell Javassist, "I want you to compile that string," and it'll compile the string, and give you a method pointer back to that compiled string, and you can insert that method into any class you want. You can do cool things like that. It also has an iterator for a class. So you can apply this iterator to a class file, and you can get callbacks when a method call is reached, when a type cast is reached, when a field access happens. These are all point cuts in aspect oriented programming. This is why a technology like Javassist could be used to build any aspect oriented framework. Because it has all the tools for you to easily look at a class file and manipulate it.