gwt uses generator create code before translated javascript.
java on other hand has annotation processor generates code before translated byte code.
what difference between gwt generator , java annotation processor?
gwt generators not generate code, tell gwt use it; whereas annotation processors generate code needs used other code (either referenced directly in code, or loaded through reflection – that's not possible in gwt environment though).
the way generators , processors invoked different too. gwt instantiates , runs generator each type needs processing, each permutation (this stems above difference: generator tells gwt class instantiate given type passed input), whereas annotation processor instantiated once per compilation , invoked repeatedly each processing round, each round processes set of types.
gwt has support permutations, generated class can different depending on binding properties' values achieve deferred binding (gwt generators 1 facet of deferred binding). note gwt generators don't have generate anything, can select existing class. can approximate annotation processors generating code select given implementation @ runtime.
put differently, if generate specific implementation locales en-us
, fr-fr
; gwt generator, when generator invoked, knows locale permutation about, can tell gwt use particular implementation. net result if gwt.create()
in code replaced new thegeneratedclass()
, , class can different depending on permutation (e.g. mymessagesimpl_en_us
vs. mymessagesimpl_fr_fr
). annotation processor, you'd have generate both classes , dynamically (at runtime) select among them, depending on context (you generate factory doing that, you'd still have somehow feed factory current context, e.g. current locale).
finally, way trigger them different. gwt's deferred binding triggered gwt.create()
in code, i.e. instantiation of yet-to-be-determined-at-the-time-of-writing class; whereas annotation processors triggered mere presence of annotation on element (a package, type, field, method, parameter, or in java 8 type-parameter or anywhere type used).
gwt generators , annotation processors different things, made different goals. in many cases use 1 or other interchangeably (e.g. autobeans, requestfactory, editor framework, placehistorymappers in gwt done using annotation processors), not always.