Dans mon application Web, au cours d'une modification de l'objet, j'ai besoin d'envoyer un courrier sur les modifications apportées à l'objet. Ma question est de savoir comment écrire un auditeur pour cela. S'il vous plaît donnez-moi un article à ce sujet. Merci p>
4 Réponses :
Utilisez le modèle de conception d'observateur http://fr.wikipedia.org/wiki/observer_pattern . http: //java-x.blogspot. COM / 2007/01 / Mise en œuvre-Observateur-motif-in-java.html p>
Une implémentation typique pourrait être comme ceci: votre objet est observable. Ainsi, chaque fois, l'une des valeurs (observées) change, un événement est licencié et tous les auditeurs enregistrés sont informés. Un de ces auditeurs seraient désormais conçus pour prendre la notification et créer et envoyer un email (API de mail Java)
Prenons un élégant haricot que nous faisons Observable: p> L'interface de l'auditeur: p> l'interface observable: p> et le courriel: p> public class Sender implements Listener {
public void register(Observable observable) {observable.add(this);}
public void unregister(Observable observable) {observable.remove(this);}
public void fieldChanged(Object source, String attribute) {
sendEmail(source, attribute); // this has to be implemented
}
}
Je conseillerais d'utiliser une liste CopyOnwriRraRayRayList
Si vous souhaitez simplement savoir sur les propriétés d'un objet modifié, je vous recommanderais d'utiliser un PropertyChangelistener code> . De cette façon, vous pouvez utiliser PropertyChangeSupport code > classe d'utilitaire pour gérer vos instances d'auditeur et le tir des événements. Vous évitez également de réinventer la roue.
Pour plus d'événement sur mesure, je vous recommanderais de définir votre propre interface d'auditeur. P>
// Create a new instance of our observable MyBean class.
MyBean bean = new MyBean();
// Create a PropertyChangeListener specifically for listening to property "b".
PropertyChangeListener listener = new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
assert "b".equals(evt.getPropertyName());
boolean oldB = (Boolean) evt.getOldValue();
boolean newB = (Boolean) evt.getNewValue();
System.err.println(String.format("Property b updated: %b -> %b, oldB, newB));
}
}
// Register listener with specific property name. It will only be called back
// if this property changes, *not* the "i" int property.
bean.addPropertyChangeListener("b", listener);
Vous devez utiliser le modèle de conception d'observateur strong>. Ce modèle utilise ces classes: Voici un exemple. p> L'observateur: p>
public static void main(String[] args)
{
// Create YourObject
YourObject o = new YourObject();
// create an observer
EmailObserver emailObserver = new EmailObserver();
// subscribe the observer to your object
o.addObserver(emailObserver);
// Now you can modify your object, changes will be notified by email
o.setSomething(...);
}
Essayez 'Custom Event à Java »
Pouvez-vous modifier le code source de la classe d'objets? IAW, pouvez-vous rendre cette classe observable ou avons-nous besoin d'un observateur séparé pour cet objet?
Frère c'était une bonne question vraiment utile +1