I found a satisfactory answer for anyone approaching this question from
the same angle as me. My basic issue with JavaBeans was that the
practice "smells of accessors". I don't subscribe to the "accessor
methods are evil" belief, not in the literal sense anyway, but I do
think that having too many accessors could be a sign of a flawed
design. And in the case of JavaBeans, if you want to delegate to your
interface designers, you have to specify a lot of setters and
getters... to a certain naming convention, no less, which I found to be
a big red flag.
This article explained it very well:
http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-toolbox.html.
Written by Allen Holub, it about the pitfalls of abusing getter and
setter methods. I found his comment interesting, that accessors exist
mainly for the purpose of hooks into higher level automation and
testing tools. It's important to note that this title is not intended
to be taken literally, it is just a way to start a conversation. So
the rest of this post quotes from that article, entitled "Why getter
and setter methods are evil.":
You might object by saying, "But what about JavaBeans?" What about
them? You can certainly build JavaBeans without getters and setters.
The BeanCustomizer, BeanInfo, and BeanDescriptor classes all exist for
exactly this purpose. The JavaBean spec designers threw the
getter/setter idiom into the picture because they thought it would be
an easy way to quickly make a bean-something you can do while you're
learning how to do it right. Unfortunately, nobody did that.
Accessors were created solely as a way to tag certain properties so a
UI-builder program or equivalent could identify them. You aren't
supposed to call these methods yourself. They exist for an automated
tool to use. This tool uses the introspection APIs in the Class class
to find the methods and extrapolate the existence of certain properties
from the method names. In practice, this introspection-based idiom
hasn't worked out. It's made the code vastly too complicated and
procedural. Programmers who don't understand data abstraction actually
call the accessors, and as a consequence, the code is less
maintainable. For this reason, a metadata feature will be incorporated
into Java 1.5 (due in mid 2004). So instead of: