If you reuse a class, you should also work with beans, because they are cleaner than general classes. At a minimum, a bean must be serializable, and be a public class with a public zero-argument constructor. The introspection mechanism figures out a bean's events and properties according to the signature of its accessors, such as the pattern by which these methods access the events and properties. The bean package also specifies the BeanInfo class that describes the bean class. BeanInfo assists the code introspector while the bean is dynamically processed.
Beans define a component framework and are quite autonomous.
The autonomy of a bean makes reuse and automatic processing easier, because the constraints on a bean and on its properties require that its interface be more predictable than a general class. A bean is created using the zero-argument constructor, and is customized by invoking the setter methods. Without the bean's constraints, you have to choose between the available constructors to create an instance, and find the right methods to call among all the methods provided by the class. However, even having these constraints in place is still not enough for true interoperability. Take applets, for example.