28
14 - JavaBeans

14 - JavaBeans

  • Upload
    ash

  • View
    56

  • Download
    0

Embed Size (px)

DESCRIPTION

14 - JavaBeans. Content. What is a Java Bean? BDK What makes Bean possible? Support for Java Bean References. Hvad er Java Beans?. Software komponent Specificerede interfaces. Uafhængig deployment Definition: - PowerPoint PPT Presentation

Citation preview

Page 1: 14 - JavaBeans

14 - JavaBeans

Page 2: 14 - JavaBeans

2NOEA 2009Java-kursus – JavaBeans

Content

• What is a Java Bean?• BDK• What makes Bean possible?• Support for Java Bean• References

Page 3: 14 - JavaBeans

3NOEA 2009Java-kursus – JavaBeans

Hvad er Java Beans?

• Software komponent– Specificerede interfaces.– Uafhængig deployment

• Definition:

“A Java bean is a reusable software component that can be visually manipulated in builder tools.”

Java Bean Tutorials

Page 4: 14 - JavaBeans

4NOEA 2009Java-kursus – JavaBeans

What is JavaBeans?

• JavaBeans er en portable, platform-uafhængig komponent model, som er skrevet i Java.

• Den giver udviklere mulighed for at skrive genbrugelige komponenter “once and run them anywhere”.

• Målet for JavaBeans er oprette et system hvor udviklere kan tage et sæt beans fra et bibliotek og strikke dem sammen til en applikation

Page 5: 14 - JavaBeans

5NOEA 2009Java-kursus – JavaBeans

Software Komponenter

“A software component is a unit of composition with contractually specified interfaces and explicit context dependencies only. A software component can be deployed independently and is subject to composition by third parties.”

Szyperski ECOOP96

Page 6: 14 - JavaBeans

6NOEA 2009Java-kursus – JavaBeans

Composition not Inheritance

In OO languages, new objects are created from old using the inheritance mechanism.

Pluggable components are connected together by composition rather than inheritance.

Most of the flexibility of inheritance can be gained from various compositional tactics.

Page 7: 14 - JavaBeans

7NOEA 2009Java-kursus – JavaBeans

Features i JavaBeans

– Understøtter introspection

• så udviklingsværktøjer kan undersøge hvordan en bean virker

– Understøtter customization

• så brugeren vha. udv.værktøj kan tilpasse udseende og opførsel af en bean

– Understøtter events

• som en simpel måde til at forbinde bean’en resten af applikationen

– Understøtter properties

• dels til tilpasning og dels til programmerings formål

– Understøtter persistence

• så en bean kan tilpasses i et IDE og have sin tilstand gemt, så den kan hentes frem senere

Page 8: 14 - JavaBeans

8NOEA 2009Java-kursus – JavaBeans

Persistent lager

• Formål:– at bruge eksisterende data formater og f.eks bruge OLE eller

OpenDoc documents– at være triviel for i den normale situation med en lille bean (ved

at gemme dens interne tilstand)• Solutions

– Externalization: giver en Bean med fuld kontrol over det resulterende data layout.

– Serialization: giver mulighed for automatisk at gemme og læse den interne tilstand af samling af Java objekter

• Alle beans skal understøtte Serialization eller Externalization

Page 9: 14 - JavaBeans

9NOEA 2009Java-kursus – JavaBeans

Software komponenter

• Buttons• Text Fields• List Boxes• Scroll Bars• Dialogs• VBX, OLE

Page 10: 14 - JavaBeans

10NOEA 2009Java-kursus – JavaBeans

Properties

• Attributes.• Kan være read/write, read-only eller write-only.• Flere typer af properties:

– Simple– Indexed– Bound– Constrained

Page 11: 14 - JavaBeans

11NOEA 2009Java-kursus – JavaBeans

Design Pattern rules

Constructors En bean har kun default konstruktør

Simple Properties public T getN()public void setN ( T value)

Boolean Properties public boolean isN()public boolean getN()public void setN(boolean value)

Indexed Properties public T getN(int index)public T[] getN()public void setN(int index, T value)public void setN(T[] values)

Page 12: 14 - JavaBeans

12NOEA 2009Java-kursus – JavaBeans

Properties eksempel

public class alden2 extends Canvas {

String ourString = “Hello”;

public alden2() {

setBackground (Color.red);

setForeground (Color.blue);

}

public void setString (String newString) { ourString = newString; }

public String getString() { return ourString; }

public Dimension getMinimunSize() {

return new Dimension (50, 50);

}

}

Page 13: 14 - JavaBeans

13NOEA 2009Java-kursus – JavaBeans

Bound Properties

• Genererer notification når en property ændres.

public class propertDemo extends Canvas {

String ourString = “Hello”;

private PropertyChangeSupport changes = new PropertyChangeSupport(this);

...

public void setString (String newString) {

String oldString = ourString;

ourString = newString;

changes.firePropertyChange(“string”, oldString, newString);

}

...

Page 14: 14 - JavaBeans

14NOEA 2009Java-kursus – JavaBeans

Bound Properties...

...

public void addPropertyChangeListener (PropertyChangeListener l) {

changes.addPropertyChangeListener (l);

}

public void removePropertyChangeListener (PropertyChangeListener l) {

changes.removePropertyChangeListener(l);

}

}

Page 15: 14 - JavaBeans

15NOEA 2009Java-kursus – JavaBeans

Constrained Property• Konceptet er en vagt, der kan nedlægge veto

– abonner på ‘VetoableChange’

• kan nedlægge veto til en property ændring ved at kaste en PropertyVetoException.

public class JellyBean extends Canvas {

private PropertyChangeSupport changes = new PropertyChangeSupport (this);

private VetoableChangeSupport vetos = new VetoableChangeSupport (this);

...

public void setColor (int newColor) throws PropertyVetoException {

int oldColor = currentColor;

vetos.fireVetoableChange(“setColor”, newInteger(oldColor),

newInteger(newColor));

currentColor = newColor;

Page 16: 14 - JavaBeans

16NOEA 2009Java-kursus – JavaBeans

Constrained Property...

changes.firePropertyChange(“setColor”, new Integer(oldColor)

,new Integer(newColor));

}

public void addVetoableChangeListener (VetoableChangeListener l) {

vetos.addVetoableChangeListener(l);

}

public void removeVetoableChangeListener(VetoableChangeListener l) {

vetos.removeVetoableChangeListener(l);

}

}

Page 17: 14 - JavaBeans

17NOEA 2009Java-kursus – JavaBeans

Bean Events

•Definer en ny Event klasse som arver fra EventObject. XEvent

•Definer et nyt interface som arver fra EventListener og som listeners skal implementere. XEventListener

•Det skal være muligt at registrere og afregistrere listeners f.eks addXListener(), removeXListener().

•Observable skal have kode til at genere event’et og sende det til alle registrerede listeners. fireXEvent()

•Listeneren skal implementere interfacet for at modtage event.changeX()

•Listeneren skal registrere sig for at kunne modtage eventet.

Page 18: 14 - JavaBeans

18NOEA 2009Java-kursus – JavaBeans

Events

public class eventSource extends GenericEventGenerator {

...

private Vector myListeners = new Vector();

...

public synchronized void addMyEventListeners ( MyEventListener l) {

myListeners.addElement(l);

}

public synchronized void removeMyEventListeners ( MyEventListener l) {

myListeners.removeElement(l);

}

...

Page 19: 14 - JavaBeans

19NOEA 2009Java-kursus – JavaBeans

Events...

private void notifyEvents() {

Vector l;

synchronized (this) {

l = (Vector) myListener.clone();

}

for (int i = 0; i < l.size(); i++) {

MyEventListener mel = (MyEventListener) l.elementAt(i);

mel.handleThisEvent (this);

}

}

Page 20: 14 - JavaBeans

20NOEA 2009Java-kursus – JavaBeans

Persistens

• Giver IDE’et mulighed for at genskabe en beans tilstand

public class Button implements java.io.Serializable { ... }

• Attributter kan bypass’e serialisation ved bruge keywords transient eller static.

Page 21: 14 - JavaBeans

21NOEA 2009Java-kursus – JavaBeans

Persistens...

• writeObject og readObject

private void writeObject (java.io.ObjectOutputStream s)

throws java.io.IOException{}

private void readObject (java.io.ObjectInputStream s)

throws java.io.IOException, java.lang.ClassNotFoundException {}

• Giver mulighed for tilpasning af objekter.• Udseende og opførsel kan gemmes og genskabes• Gem ikke referencer til andre beans

Page 22: 14 - JavaBeans

22NOEA 2009Java-kursus – JavaBeans

Introspection

• En mekanisme der giver IDE’et mulighed for at analysere en bean

• To måder til analysere en bean:– low-level reflection APIs. F.eks Class.getSuperclass()– eksplicit information fra udbyder

• Eksplicit information gives via BeanInfo klassen <classname>BeanInfo.

Page 23: 14 - JavaBeans

23NOEA 2009Java-kursus – JavaBeans

BDK Example

package acme.beans;

import java.awt.*;

import java.io.Serializable;

public class Acme04Bean extends Canvas implements Serializable {

public Acme04Bean() {

resize(60,40);

this.label="Bean";

setFont(new Font("Dialog", Font.PLAIN, 12));

}

Page 24: 14 - JavaBeans

24NOEA 2009Java-kursus – JavaBeans

Tilpasning af bean

• Lav din egen <classname>BeanInfo klasse som arver fra SimpleBeanInfo.

• Lav evt. din egen <classname>Editor klasse som arver fra PropertyEditorSupport for lave en tilpasset property editor.

Page 25: 14 - JavaBeans

25NOEA 2009Java-kursus – JavaBeans

Customization ...<classname>BeanInfo

package sun.beanbox.beans;

import java.beans.*;

public class NervousText07BeanInfo extends SimpleBeanInfo {

private final static Class beanClass =

NervousText07.class;

public BeanDescriptor getBeanDescriptor() {

BeanDescriptor bd = new BeanDescriptor(beanClass);

bd.setDisplayName("Uneasy Text 07");

return bd;

}

Page 26: 14 - JavaBeans

26NOEA 2009Java-kursus – JavaBeans

Customization...

public PropertyDescriptor[] getPropertyDescriptors() {

try {

PropertyDescriptor textPD =

new PropertyDescriptor("text", beanClass);

PropertyDescriptor rv[] = {textPD};

textPD.setPropertyEditorClass(NervousText07TextPropertyEditor.class);

return rv;

} catch (IntrospectionException e) {

throw new Error(e.toString());

}

}

}

Page 27: 14 - JavaBeans

27NOEA 2009Java-kursus – JavaBeans

Customization...<classname>Editor

package sun.beanbox.beans;

import java.beans.*;

public class NervousText07TextPropertyEditor

extends PropertyEditorSupport {

public String[] getTags() {

String values[] = {

"Nervous Text",

"Anxious Text",

"Funny Text",

"Wobbly Text"};

return values;

}

}

Page 28: 14 - JavaBeans

28NOEA 2009Java-kursus – JavaBeans

BDK Output