Transcript document
JavaBeans: Introspection and
Customization
Umer Farooq
January 30, 2002
CS6704: Design Patterns & Component Frameworks
Deploying Beans to the Enterprise
How do we treat beans as independent software components?
How do you examine a bean and expose its features:
properties, events, and methods?
How do you create global international beans?
Reflection and Introspection
A Bean has to reveal it’s properties, methods and events to
the builder tool.
Reflection is the ability to obtain information about the
fields,constructors and methods of any class.
Introspection is the ability to obtain information about the
properties, events and methods of a Bean.
Reflection
Is Java a true Object-Oriented language?
For reflection, all data types must be objects
Classes and interfaces exist for reflection:
class Array, Class, Constructor, Field, Method,
Modifier
interface Member
Introspection
class Introspector uses core reflection API to discover a
Bean’s methods
All java.beans.Introspector class methods are static
Call Introspector.getBeanInfo(…) method to get the
BeanInfo object
Explicitly expose features
Rely on BeanInfo to expose some Bean features while
relying on low-level reflection to expose others.
BeanInfo interface
BeanInfo defines methods that return descriptors for each
property, method, or event that you want exposed:
PropertyDescriptor[] getPropertyDescriptors();
MethodDescriptor[] getMethodDescriptors();
EventSetDescriptor[] getEventSetDescriptors();
Creating a BeanInfo class (1)
1. Name your BeanInfo class
Target class: ExplicitButton
Bean information class: ExplicitButtonBeanInfo
2. Subclass SimpleBeanInfo
public class ExplicitButtonBeanInfo extends
SimpleBeanInfo
Creating a BeanInfo class (2)
3. Override methods
public PropertyDescriptor[] getPropertyDescriptors() {
try {
PropertyDescriptor background = new PropertyDescriptor("background",
beanClass);
PropertyDescriptor foreground = new
PropertyDescriptor("foreground", beanClass);
PropertyDescriptor font = new
PropertyDescriptor("font", beanClass);
PropertyDescriptor label = new PropertyDescriptor("label", beanClass);
}
background.setBound(true);
foreground.setBound(true);
font.setBound(true);
label.setBound(true);
PropertyDescriptor rv[] = {background, foreground, font, label};
return rv;
} catch (IntrospectionException e) {
throw new Error(e.toString());
}
Creating a BeanInfo class (3)
4. Specify the target Bean class
public BeanDescriptor getBeanDescriptor() {
return new BeanDescriptor(beanClass);
}
...
private final static Class beanClass = ExplicitButton.class
Bean Customization
A Bean's appearance and behavior can be customized at
design time:
1. By using a property editor:
Property sheet
Associated with a property
2. By using customizers:
Complete GUI control
Associated with a bean
Property Editors
Explicit association via a BeanInfo object using
the method setPropertyEditorClass(…)
Explicit registration via
java.Beans.PropertyEditorManager.registerE
ditor
Naming convention
Customizers
Extend java.awt.Component or one of its subclasses.
Implement the java.beans.Customizer interface This
means implementing methods to register
PropertyChangeListener objects, and firing property
change events at those listeners when a change to the target
Bean has occurred.
Implement a default constructor.
Associate the customizer with its target class via
BeanInfo.getBeanDescriptor.
International Beans
Programs are written with one language and culture
What about localization?
Locale is a geographic, political, or culturally cohesive
region sharing the same language and customs
Localizing objects:
Use Java’s locale class
Encapsulate locale-specific data in resource bundles
Locale localeUS = new Locale(“en”, “US”);
public Locale getLocale( )
References
http://java.sun.com/docs/books/tutorial/javabeans/
JavaBeans Unleased, Dr. Don Doherty, Rick Leinecker
ftp://ftp.javasoft.com/docs/beans/beans.101.pdf
JavaBeans 1.01 Specification
Beginning Java 2, Ivor Horton
Discussion
When should the reflection API not be used?
When to use BeanInfo and when to use low-level
Reflection API?
What kind of applications might want to use the Reflection
API?