JavaBeans are reusable software components that can be visually manipulated in builder tools. They follow certain conventions like having a default constructor and getter/setter methods for properties. Beans are platform independent and their methods, properties, and events can be controlled. There are four types of properties beans can expose: simple, indexed, bound, and constrained. Simple properties have a single getter/setter pair while indexed properties support arrays. Bound properties notify listeners of changes while constrained properties can have changes vetoed by listeners.