Java Beans allow developers to capture and discover the state of objects by defining classes that follow the Java Bean specification. A Java class is considered a Java Bean if it contains getter and/or setter methods, does not extend other classes or interfaces, and follows other naming conventions. Properties of a Java Bean are any aspects that can be accessed via getter and setter methods. There are different types of properties such as indexed, bound, and constrained properties. Java Beans also support long term persistence by encoding and decoding bean objects from XML files.