Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parConstantin Loison Modifié depuis plus de 10 années
1
Page de garde Les JavaBeans ISIA, Mars 2003 Yannis.BRES@sophia.inria.fr http://www.yannis.bres.name
2
Les Composants La plupart des applications utilisent désormais des composants "boîte-noires" et se chargent de mettre en œuvre les liens logiciels entre ces composants Ces composants peuvent provenir déquipes de développement différentes, voire de compagnies différentes Un composant doit être rapidement utilisable, parfois par un non-informaticien Création et paramétrisation via un IDE, sans avoir à écrire de code Une infrastructure standardisée facilitant lutilisation de composants est nécessaire : CORBA OLE/COM/ActiveX/… JavaBeans
3
Les JavaBeans Linfrastructure de Java +Quelques règles simples de conception des interfaces de classes beans Un modèle de composants logiciels := réutilisables self-describing manipulables "à la souris" par un IDE a état persistant +Quelques classes de support pour simplifier la vie du développeur de beans paramétrables générateurs dévénements informant de lévolution de leur état interne graphiques (éléments dIHM, …) ou non (composants daccès à une BD, …) http://java.sun.com/products/javabeans interopérables (CORBA, Microsoft OLE/COM/ActiveX) portables
4
Ptite démo
5
De simples classes Java Par défaut, aucune classe à étendre, aucune interface à implémenter Pour les composants graphiques, étendre java.awt.Component Pour que létat soit persistant, "implémenter" java.io.Serializable Les propriétés et événements des beans sont découverts par introspection Des informations supplémentaires sur un bean XXX peuvent être fournies via une classe XXXBeanInfo qui implémente linterface java.beans.BeanInfo
6
Propriétés dun JavaBean Un bean exporte des propriétés : Champs publics Méthodes de lecture de propriété de la forme A éviter : pas de contrôle daccès aux données public XXXType getXXX() Méthodes décriture de propriété de la forme public void setXXX( XXXType ) Exemples : public Color color; private boolean is_visible; public boolean getVisible() {…} public void setVisible( boolean visible ) { … }
7
Propriétés indexées public XXXType[] getXXX() {…} public XXXType getXXX( int index ) {…} public void setXXX( XXXType[] new_values ) {…} public void setXXX( int index, XXXType new_value ) {…} public class Person { protected Person[] friends; // simple getter for the friend property public Friend[] getFriend() { return friends; } // indexed getter for the friend property public Friend getFriend( int index ) { return friends[index]; } // simple setter for the friend property public void setFriend( Friend[] newFriends ) { friends= newFriends; } // indexed setter for the friend property public void setFriend( int index, Friend newFriend ) { friends[index]= newFriend; }
8
Evénements Principe des écouteurs (listeners), déjà mis en œuvre en AWT/Swing Un objet (cible) intéressé par les changements détat dun bean (source) senregistre auprès de ce bean via une méthode addXXXListener : void addPropertyChangeListener( PropertyChangeListener ) Lobjet intéressé doit implémenter linterface XXXListener, qui énumère donc les différents événements susceptibles de survenir Lorsque le bean a quelque chose à signaler, il invoque une méthode de linterface XXXListener sur tous les listeners enregistrés (multicast) : void propertyChange( PropertyChangeEvent event ) event fournit des informations supplémentaires sur lévénement survenu Les interfaces XXXListener dérivent de java.util.EventListener Les objets XXXEvent dérivent de java.util.EventObject
9
Exemple : MouseListener et MouseEvent public interface MouseListener extends EventListener { void mouseClicked( MouseEvent event ) void mouseEntered( MouseEvent event ) void mouseExited( MouseEvent event ) void mousePressed( MouseEvent event ) void mouseReleased( MouseEvent event ) } public class MouseEvent extends...EventObject { private int x, y; … public MouseEvent( Component source, int x, int y ) {…} … public int getX() { return x; } … }
10
java.beans.PropertyChangeSupport Une classe facilitant le support des ProperyChangeListener s : void addPropertyChangeListener( PropertyChangeListener listener ) void addPropertyChangeListener( String propertyName, PropertyChangeListener listener ) void firePropertyChange( PropertyChangeEvent evt ) void firePropertyChange( String propertyName, boolean oldValue, boolean newValue ) void firePropertyChange( String propertyName, Object oldValue, Object newValue ) boolean hasListeners( String propertyName ) void removePropertyChangeListener( PropertyChangeListener listener ) void removePropertyChangeListener( String propertyName, PropertyChangeListener listener ) … Les methodes sont synchronized Les methodes fireXXX némettent pas dévénement si les valeurs nont pas changé
11
Propriétés liées (bound properties) Changement de propriété via une méthode daccès => lancement dun événement public class Person { String firstname; PropertyChangeSupport changes= new PropertyChangeSupport( this ); // bound property setter for the firstname property public void setFirstname( String newFirstname ) { String oldFirstname= firstname; firstname= newFirstname; changes.firePropertyChange("firstname", oldFirstname, newFirstname); } // registration support public void addPropertyChangeListener( PropertyChangeListener l ) { changes.addPropertyChangeListener( l ); } public void removePropertyChangeListener( PropertyChangeListener l ) { changes.removePropertyChangeListener( l ); }
12
Propriétés contraintes Des VetoableChangeListener s ont la possibilité de refuser une mise à jour de propriété en lançant lexception java.beans.PropertyVetoException, lévénement " VetoableChange " étant diffusé avant mise à jour de la propriété public void setXXX( XXXType new_value ) throws java.beans.PropertyVetoException public class Person { private VetoableChangeSupport vetos= new VetoableChangeSupport(this); // bound property setter for the firstname property public void setFirstname( String newFirstname ) throws java.beans.PropertyVetoException { String oldFirstname= firstname; vetos.fireVetoableChange("firstname", oldFirstname, newFirstname); firstname= newFirstname; changes.firePropertyChange("firstname", oldFirstname, newFirstname); }... } Utiliser java.beans.VetoableChangeSupport :
13
Introspection et BeanInfo Lintrospection permet à un composant étranger au bean de : Découvrir ses propriétés (en lecture, écriture, lecture/écriture) Découvrir les événements susceptibles dêtre émis Données membres publiques Méthodes de la forme XXXType getXXX(), void setXXX( XXXType ) Méthodes de la forme void addXXXListener( XXXListener ), etc. La classe java.beans.Introspector fournit (notamment) une méthode : public static BeanInfo getBeanInfo( Class beanClass ) Un objet BeanInfo recense les infos du bean : EventSetDescriptor[] getEventSetDescriptors() MethodDescriptor[] getMethodDescriptors() PropertyDescriptor[] getPropertyDescriptors() Il est possible de fournir une classe XXXBeanInfo (dérivant éventuellement de java.beans.SimpleBeanInfo ), générable par lIDE …
14
PropertyDescriptor Mais surtout : public Class getPropertyType() public Method getReadMethod() public Method getWriteMethod() public boolean isBound() public boolean isConstrained() … Class getPropertyEditorClass() Renvoie un composant graphique spécialisé dans lédition de la propriété Egalement, dans BeanInfo : BeanDescriptor getBeanDescriptor() Puis : Class getCustomizerClass() Renvoie un composant graphique spécialisé dans le paramétrage du bean
15
Persistance Deux choix pour obtenir un bean lors de lexécution : Linstancier de zéro et le configurer Configurer le bean "at design-time" et le désérialiser à lexécution Le bean doit "implémenter" java.io.Serializable Les champs non-persistants doivent être marqués transient
16
Packaging Un bean ou une librairie de beans peuvent être empaquetés dans un.jar, archive zip similaire à un.tar Unix Le.jar contient les classes beans, mais aussi des classes aditionnelles, des ressources graphiques, etc. Un.jar peut être signé pour garantir son authenticité Un.jar peut embarquer un fichier manifest, qui décrit le.jar et ses classes : jar cfvm file.jar file... Manifest-Version: 1.0 Name: Classe1.class Java-Bean: True Name: Classe2.class Java-Bean: True
17
BeanBox et BeanBuilder BeanBox, le premier container de test pour les JavaBeans, deprecated : http://java.sun.com/products/javabeans/software/bdk_download.html BeanBuilder, encore en version Beta : http://java.sun.com/products/javabeans/beanbuilder
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.