Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Introduction to Java Beans From Anders Børjesson JavaBeans components • JavaBeans are the components in the Java environment – COM / ActiveX are components in the Microsoft environment • Many classes in J2SE are JavaBeans – Like the Java Swing classes Introduction to JavaBeans 2 Characteristics • Visibility – Some JavaBeans are visual • Buttons, TextFields, etc. – Some JavaBeans are “invisible” • Model components (worker classes) • Size (granularity) – Some JavaBeans are small (in terms of features) • Buttons, TextFields, etc. – Some JavaBeans are big (in terms of features) • SMTP bean, entire applications Introduction to JavaBeans 3 Requirements for JavaBeans classes • Must have a no-arg (no parameters) constructor – More constructors are allowed – Remember: If you add a constructor with parameters then the default no-arg constructor is gone. • Must implements java.io.Serializable • Data should not be public – Data should be accesses via get and set methods • Should be thread safe – Use synchronized carefully Introduction to JavaBeans 4 Non-requirements for JavaBeans • An applet must extend java.lang.Applet • A servlet must extend javax.servlet.Servlet • A thread must implement java.lang.Runnable • Beans does not need to extend or implement anything special – Except for java.io.Serializable • Which is only a marker interface Introduction to JavaBeans 5 JavaBeans terms • Properties – To be read or set by other objects • Get and set methods • Methods – To be called by other objects • Ordinary Java methods • Events – Sent to other objects when something happens to the bean object • Like a property with a new value Introduction to JavaBeans 6 Access levels • 3 access levels – Read-only • Make only a get method – Write-only • Make only a set method – Quite rare – Read / write • Make get and set methods • Most common Introduction to JavaBeans 7 Different kinds of properties • Different kinds of properties – Simple or indexed (array) properties – Bound properties • Event after a new value is set on the property • To update other components (e.g. visual components) – Constrained properties • Event before a new value is set on the property • To check if the new value is legal according to the current business rules Introduction to JavaBeans 8 Simple properties • Represents a single value • A simple property has – 1 name – 1 type • Primitive data type or • Class based data type • Example: size – – – – Name: size Type: int public void setSize(int size) public int getSize() AccountSimple.java Introduction to JavaBeans 9 Example bean: JButton • Some properties of javax.swing.JButton – Text: setText(String), getText() – Font: setFont(Font), getFont() – Icon: setIcon(Icon), getIcon() – Enabled: setEnabled(boolean), isEnabled() • Properties of type boolean has special naming conventions – setXx, isXx Introduction to JavaBeans 10 Programming JavaBeans • JavaBeans can be programmed using – Ordinary text editors • TextPad, even Notepad – Builder tools • NetBeans, Eclipse, JBuilder, etc. • Builder tools often have special features that makes programming JavaBeans easier. Introduction to JavaBeans 11 Indexed properties • Represents an array of values • Example: Property: address Type: Address – Public void setAddress(int index, Address addr) – Public Address getAddress(int index) – Bulk operations: • Public void setAddresses(Address[] addr) • Public Address[] getAddresses() – AccountIndexedOwner.java Introduction to JavaBeans 12 Bound properties • Sends an event to another object after the property is assigned a new value. – The other object is sometimes called: Observer, listener, etc. • The other object may react on the event – Update its own state • Content of an event – propertyName, oldValue, newValue, source Introduction to JavaBeans 13 Examples • AccountBound.java • ScreenLogListener.java • AccountBoundApp.java Introduction to JavaBeans 14 Observer pattern Account 0..n #pcs : PropertyChangeSupport +addPropertyChangeListener(l : PropertyChangeListener) +removePropertyChangeListener(l : PropertyChangeListener) «Interface» PropertyChangeListener 0..n +propertyChange(evt : PropertyChangeEvent) c MyPropertyChangeListener +propertyChange(evt : PropertyChangeEvent) Introduction to JavaBeans 15 Sequence diagram: Firing a property change event :Account :PropertyChangeSupport :PropertyChangeListener :PropertyChangeListener setBalance firePropertyChange propertyChange propertyChange Introduction to JavaBeans 16 Sequence diagram: Adding a property change listener to a bean :PropertyChangeListener :Account :PropertyChangeSupport addPropertyChangeListener(this) addPropertyChangeListener(...) Introduction to JavaBeans 17 Classes and interfaces • Package java.beans – Class PropertyChangeEvent • extends EventObject – Interface PropetyChangeListener • Extends EventListener – Class PropertyChangeSupport • Helps you to make bound properties Introduction to JavaBeans 18 PropertyChangeListener • Interface PropertyChangeListener extends EventListener – EventListener is a marker interface • No methods to implement • PropertyChangeListener methods – void propertyChange(PropertyChangeEvent evt) Introduction to JavaBeans 19 PropertyChangeEvent • After changing the value of a property – firePropertyChange(propertyChangeName, oldValue, newValue) • Listener called – propertyChange(PropertyChangeEvent ev) • PropertyChangeEvent methods: – – – – String getPropertyName() Object getOldValue() Object getNewValue() Object getSource() Introduction to JavaBeans 20 PropertyChangeSupport • Helps you to make bound properties • Constructor – PropertyChangeSupport(Object sourceBean) • Some methods – addPropertyChangeListener(PropertyChangeListener listener) – removePropertyChangeListener(PropertyChangeListener listener) – addPropertyChangeListener(String propertyName, PropertyChangeListener listener) – removePropertyChangeListener(String propertyName, PropertyChangeListener listener) – firePropertyChange(String propertyName, Object oldValue, Object newValue) – firePropertyChange(String propertyName, int oldValue, int newValue) Introduction to JavaBeans 21 Event loops • Problem – 2 beans send propertyChangeEvents to each other • Example: User interface objects events a model object, and vice versa – The 2 beans might event each other forever. • Solution – Check if the new value is really a new value • i.e. newValue != oldValue • PropertyChangeSupport.firePropertyChange() does the checking Introduction to JavaBeans 22 Example bean: JButton • Javax.swing.JButton is a bean – Does not use ProperChangeEvent, etc. – addActionListener(ActionListener l) • Listens for button presses – addChangeListener(ChangeListener l) • Listens for changes in the button’s state – Size, font, text, etc. Introduction to JavaBeans 23 Constrained properties • A bean object asks one (or more) observers if an update of a property is legal – Observer may throw PropertyVetoException – Example: account.setBalance(-100) – A property is often bound and constrained • Examples – – – – – AccountConstrained.java MinimumBalanceChecker.java MaximumWithdrawChecker.java AccountConstrainedTest.java AccountFrame.java + AccountGuiApp.java Introduction to JavaBeans 24 Dynamic vs. static characteristics on properties • Static characteristic – Follows the object for its life time. • Dynamic characteristic – Changes over time during the objects life time – Characteristics may be (de)aggregated using constrained properties. – Example: AccountAdminFrame.java Introduction to JavaBeans 25 Low coupling • The event mechanism in JavaBeans provides low coupling – The bean object doesn’t know much about the listeners • Except that listeners must implement PropertyChangeListener or PropertyVetoListener – The listeners doesn’t know much about the bean • It’s just an Object – Which we sometimes have to typecast to the Bean class (which is very bad) Introduction to JavaBeans 26 Using JavaBeans in builder tools • JavaBeans can be used in a builder tool like – NetBeans – Eclipse – Borland JBuilder – etc. • The bean must be “installed” in the builder – The builder usually helps you to during installation Introduction to JavaBeans 27 Introspection • The builder tool unzip’s the JAR file to get the class files. • The builder tool “learns” about the beans’ properties, methods, and events using the introspection API – Package java.beans • • • • • Class Introspector Interface BeanInfo Interface PropertyDescriptor Interface MethodDescriptor Interface EventSetDescriptor – Example: beanbank/introspection/IntrospectionApp.java Introduction to JavaBeans 28 Using JavaBeans • JavaBeans can be used as ordinary classes in – Java applications, applets, servlets – JSP (JavaServer Pages) • special tags to manipulated JavaBeans – <jsp:useBean id="cart" class="shop.cart.ShoppingCart" scope="session" /> – <jsp:getProperty name="cart" property="numberOfItems" /> – <jsp:setProperty name="cart" property="... " value="... " /> Introduction to JavaBeans 29 JavaBeans vs. Enterprise JavaBeans • JavaBeans – Are relatively simple – Part of Java Standard Edition (J2SE) – Can be used in an ordinary Java application / applet • Enterprise JavaBeans – – – – More advanced Part of Java Enterprise Edition (J2EE) Middle tier: Between (web)application and database. Can only be used in an enterprise Java application • Requires an J2EE server to run the application Introduction to JavaBeans 30 Job types using JavaBeans and other types of components • Designing components • Programming components • Documenting components – Technical writer • • • • Design using components Programming using components Marketing / selling components Testing components – Correctness, performance, security [Trojan horses, etc.] Introduction to JavaBeans 31 References • Niemeyer & Knudsen Learning Java, 3rd edition, O’Reilly 2005 – 22. JavaBeans, page 751-786 Introduction to JavaBeans 32