Benachrichtigung bei neuer Objekt-Instanz

sambalmueslie

sambalmueslie

Bekanntes Mitglied
Hallo,

ich bin im Zuge von EJB auf Annotations als gestoßen um Klassen zu Dekorieren.
Jetzt bin ich gerade etwas am Forschen wie so etwas gehen könnte :) da Annotations ja nur Meta-Informationen enthalten.

Mein Ansatz ist, dass ich an einer geeigneten Stelle "überwache" ob eine neue Instanz zu einer Klasse gehört die eine bestimmte Annotation enthält.

Meine Frage ist jetzt, gibt es diese geeignete Stelle und wo ist die?
Habe zunächst an den Classloader gedacht aber der springt ja nur zu Beginn an (zumindest verstehe ich das so), wenn die Klasse zum ersten mal geladen wird und das würde mir nichts bringen.

Hat jemand da ein paar Infos die mir weiterhelfen könnten :) Reicht auch nur ein Begriff nachdem ich googlen darf :)

Gruß Oli
 
T

Tomate_Salat

Gast
Annotationen sind lustig, damit spiele ich in letzter Zeit auch gerne rum. Aber hier würde sich wohl eher Vererbung anbieten:
Java:
import java.util.ListIterator;
import java.util.Vector;

public class InstWatcher
{
	public static void main(String[] args) 
	{
		ICreationListener myListener=new ICreationListener() {
			@Override
			public void objectCreated(TObject object) {
				System.out.println("Ein neues Objekt wurder erstellt");
			}
		};
		
		TObject.addCreationListener(myListener);
		
		new MyObject();
	}
}

interface ICreationListener
{
	void objectCreated(TObject object);
}

class TObject
{
	private static Vector<ICreationListener> listener=new Vector<ICreationListener>();
	
	public TObject() 
	{
		for(ListIterator<ICreationListener> it=listener.listIterator();it.hasNext();)
			it.next().objectCreated(this);
	}
	
	public static void addCreationListener(ICreationListener listener)
	{
		TObject.listener.add(listener);
	}
	
	public static void removeCreationListener(ICreationListener listener)
	{
		TObject.listener.remove(listener);
	}
}

class MyObject 
	extends TObject
{
	public void doSomething()
	{
		System.out.println("MyObject.doSomething()");
	}
}

über Annotationen wüsste ich auf die schnelle keinen Weg das zu überwachen. Zumal diese Ausgwertet werden müssten, d.h du hättest dann in etwa sowas:
Java:
import static de.my.package.SomeClass.NEW;
....
MyObject obj=NEW(MyObject.class);
allerdings bräuchtest du dann auch keine Annotationen ;-)
 
sambalmueslie

sambalmueslie

Bekanntes Mitglied
Hm das mit Vererbung geht natürlich, wobei ich dann keine Überwachung brauche sondern lediglich eine ServiceFacade für meine Dienste zur Verfügung stelle.

Java:
public interface ServiceFacade {

... here are the services :-) 

}

public abstract class ServiceProvider {

public ServiceFacade getServices(){
return facade;
}

}


public class MyHandler extends ServiceProvider {


handle the stuff

}

aber genau das möchte ich nicht :) sondern ich stelle mir das so hier vor:

Java:
public class MyHandler {

@Service
private ServiceFacade services;

}

und via Reflection wird die ServiceFacade gesetzt :) its magic und its transparent :)


Gruß Oli
 
T

Tomate_Salat

Gast
Willkommen in der Welt von Dependency Injection ;-) : GUICE
----
Randnotiz: Wenn es dir um die Technik geht, wie man mit Annotationen arbeitet/arbeiten kann. In meinem Block findest du diverse Beispiele (der Source liegt immer dabei).
 
Zuletzt bearbeitet von einem Moderator:
T

Tomate_Salat

Gast
Ein Beispiel auf die schnelle:
Java:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;

public class InstWatcher
{
	@Service private String simpleDemo;
	
	public static void main(String[] args) throws Exception 
	{
		InstWatcher w=Factory.getInstance(InstWatcher.class);
		System.out.println(w.getSimpleDemo());
	}
	
	public String getSimpleDemo()
	{
		return simpleDemo;
	}
}

class Factory
{
	private Factory() {}
	
	public static <T> T getInstance(Class<T> cl) throws Exception
	{
		Constructor c=cl.getDeclaredConstructor();
		c.setAccessible(true);
		T inst=(T) c.newInstance();
		
		for(Field f:cl.getDeclaredFields()) {
			if(f.isAnnotationPresent(Service.class)) {				
				f.setAccessible(true);
				f.set(inst, "Hallo Welt");
			}
		}
		
		return inst;
	}
}

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@interface Service {}

Du musst dich da halt reinarbeiten. Schau dir GUICE an, da habe ich nette Ideen her, wie man was über Annotationen lösen kann. Wichtig ist bei der Erstellung einer Annotation, die Annotation: [c]@Retention(RetentionPolicy.RUNTIME)[/c], sonst kannst du diese zur Laufzeit nicht auswerten.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
dereki2000 Windows Benachrichtigung erzeugen Allgemeine Java-Themen 2
B Benachrichtigung, wenn sich Benutzer am Betriebssystem anmeldet Allgemeine Java-Themen 9
B Benachrichtigung beim Starten von Threads Allgemeine Java-Themen 7
M growl benachrichtigung unter mac Allgemeine Java-Themen 4
ZeusSeinGrossopa Testen ob neuer Tag beginnt Allgemeine Java-Themen 37
H JPA (EclipseLink) Neuer Eintrag in Collection speichern (unidirektional) Allgemeine Java-Themen 3
A Observer Pattern: feuern bei neuer Referenz-Zuweisung? Allgemeine Java-Themen 8
J Was ist schneller? Neue Variable oder neuer Wert speziell int Allgemeine Java-Themen 3
T Klasse mit neuer Eigenschaft für jede Subclass (kompliziert) Allgemeine Java-Themen 6
T Thread, neuer Thread => interrupt Allgemeine Java-Themen 4
A Java Prozess in neuer JVM Allgemeine Java-Themen 8
B Installation neuer Packages Allgemeine Java-Themen 8
I JAR aus Applikation in neuer VM ausführen Allgemeine Java-Themen 9
S Generics Hashtable mit "neuer" for-Schleife ausles Allgemeine Java-Themen 4
B CPU --- Neuer Computer muß her . Allgemeine Java-Themen 7
S Wie eine Anwendung als neuer Prozess starten? Allgemeine Java-Themen 8
E Datentypen Wie kann ich die Längen der unterschiedlichen Ebenen aus einem Objekt lesen von dem ich weiß, dass es ein mehrdimensionaler Array ist? Allgemeine Java-Themen 3
H Objekt speichern und laden Allgemeine Java-Themen 1
H Objekt speichern und laden Allgemeine Java-Themen 1
J Objekt in Bytestream umwandeln Allgemeine Java-Themen 12
J Wie kann ich von Vornherrein einen Fokus auf ein Objekt entfernen? Allgemeine Java-Themen 3
J Information von getSource() Objekt auslesen Allgemeine Java-Themen 1
Drachenbauer Wie stelle ich fest, ob ein Objekt in meinem Array vorkommt? Allgemeine Java-Themen 5
S Variable als Objekt Name Allgemeine Java-Themen 3
D Input/Output Zwischen zwei ID-Räumen unterscheiden und Objekt löschen Allgemeine Java-Themen 16
L Objekt aus Objekt-array "löschen" Allgemeine Java-Themen 2
T Objekt mit String und Int aus TxT Datei erstellen Allgemeine Java-Themen 23
T Objekt in Array packen Allgemeine Java-Themen 6
K Methodenaufruf mit String / String zu Objekt konvertieren Allgemeine Java-Themen 8
S Neues Objekt darstellen Allgemeine Java-Themen 4
J Best Practice Objekt an alle Klassen verteilen ( Discord Bot ) Allgemeine Java-Themen 7
D Objekt-Suche mit mehreren optionalen Parametern Allgemeine Java-Themen 6
M Klassen Objekt weiter geben Allgemeine Java-Themen 1
B Klassen Objekt erzeugen und Konstruktor aufrufen - Welche Lösung ist besser? Allgemeine Java-Themen 2
L Variablen Eigenes Objekt wie z.B. einen Integer zuweisen Allgemeine Java-Themen 3
D Konstruktor - jedes Objekt einzeln erzeugen - alternative? Allgemeine Java-Themen 8
S Applet Überprüfen ob ein Objekt angeklickt wurde Allgemeine Java-Themen 2
RalleYTN 3D Objekt Translation basierend auf Rotation (Probleme mit Z Rotation) Allgemeine Java-Themen 0
B Von String zu <Objekt> ||Speichern/Laden Allgemeine Java-Themen 17
G Neues Objekt aus List<JsonObject> mit Stream Allgemeine Java-Themen 4
P Threads Objekt im Konstruktor anders wie im Run()-Block Allgemeine Java-Themen 10
R Objekt funktioniert nicht auf iOS Allgemeine Java-Themen 15
K Textdatei als Objekt Allgemeine Java-Themen 4
Viktim Classenname zu Objekt Allgemeine Java-Themen 4
P Entity Objekt Methoden vs Service methoden Allgemeine Java-Themen 2
D Datentypen Klassenattribut aus Objekt in generischer Liste Allgemeine Java-Themen 15
O Klassen Bruch im gleichen Objekt Speichern Allgemeine Java-Themen 1
P Liste zu Objekt umwandeln Allgemeine Java-Themen 4
C Liste checken auf MINDESTENS ein Objekt | Bukkit Allgemeine Java-Themen 3
K Best Practice JFrame Objekt allgemein zugänglich machen Allgemeine Java-Themen 8
B ArrayList in ein Objekt legen Allgemeine Java-Themen 1
D Objekt entlang eines Funktionsgraphens bewegen Allgemeine Java-Themen 6
M Objekt serialisieren/deserialisieren und in einer SQLite-Datenbank speichern Allgemeine Java-Themen 3
D Java Objekt als Service in Runtime registrieren Allgemeine Java-Themen 1
S Interaktion mit einer website (website als Objekt?) Allgemeine Java-Themen 3
J OOP Überwachen, ob ein Objekt erzeugt wird Allgemeine Java-Themen 9
S Byte Array welches in Laufzeit aufgelöst wird // Objekt Array Allgemeine Java-Themen 3
Thallius Hash über serialisiertes Objekt? Allgemeine Java-Themen 3
Developer_X Input/Output Serialisiertes Objekt speichern und laden Allgemeine Java-Themen 1
C Generics Objekt in ArrayList Allgemeine Java-Themen 2
L Klassen Konstruktor soll Objekt anderer Klasse erzeugen Allgemeine Java-Themen 2
F Neues Objekt aus .CSV definition Allgemeine Java-Themen 3
K Methoden Objekt wird nicht erkannt Allgemeine Java-Themen 11
P Objekt mit verschiedenen Datentypen Allgemeine Java-Themen 5
T Objekt kontaktiert seinen "erzeuger" Allgemeine Java-Themen 5
S Objekt orientierte Programmierung Allgemeine Java-Themen 7
C Objekt Datenverlust nach Methodenaufruf Allgemeine Java-Themen 9
H JavaFX Von einer Methode auf stage-Objekt zugreifen Allgemeine Java-Themen 3
T WeakReference/PhantomReference: Mitbekommen WELCHES Objekt nun GC'ed wird Allgemeine Java-Themen 2
T Class-Objekt mit URLClassloader Allgemeine Java-Themen 7
P Konsoleneingabe übernehmen und Objekt instanzieren. Allgemeine Java-Themen 5
E Auf Java-Objekt aus anderer Instanz zugreifen Allgemeine Java-Themen 26
L Klassen Polymorphie:2 Attribute gleichen Namens in einem Objekt Allgemeine Java-Themen 6
P Objekt Array in Datei Speichern Allgemeine Java-Themen 3
F Dynamisch ein Objekt einer bestimmten Subklasse erstellen Allgemeine Java-Themen 7
D Player Objekt - Frame über Server anzeigen lassen. Allgemeine Java-Themen 3
V Objekt löschen Allgemeine Java-Themen 7
A OOP Wie auf Objekt der Superklasse zugreifen? Allgemeine Java-Themen 6
S Datei in File-Objekt mit UTF-8 einlesen Allgemeine Java-Themen 2
M neues Objekt speichern, nicht Referenz Allgemeine Java-Themen 10
B synchronisierter zugriff auf Objekt Allgemeine Java-Themen 6
F Objekt einer Datei verschieben, aber Verzeichnispfad fehlt Allgemeine Java-Themen 6
C Objekt Typ herausfinden Allgemeine Java-Themen 5
E Objekt beim Erzeugen in ArrayList Allgemeine Java-Themen 9
M Objekt prüfen auf null ->Invocation Target Exception??? Allgemeine Java-Themen 2
M Objekt aus Liste in Liste suchen/löschen Allgemeine Java-Themen 6
D Eigenen Objekt Pool Allgemeine Java-Themen 15
C blueJ: Objekt wird nicht in Objektleiste angezeigt Allgemeine Java-Themen 4
T Objekt 2x deserialisieren, aber nur 1x im Heap haben? Allgemeine Java-Themen 4
U Konstante in Objekt definieren Allgemeine Java-Themen 6
D this mit Objekt überschreiben Allgemeine Java-Themen 17
R Synchronized - auf welchem Objekt Allgemeine Java-Themen 16
E Objekt erstellen Allgemeine Java-Themen 7
M Timer von nicht existiertem Objekt stopen Allgemeine Java-Themen 5
M Swing-Frontend abhängig von ausgewähltem Objekt Allgemeine Java-Themen 4
J Lebt das Objekt noch?? Allgemeine Java-Themen 12
K Objekt einer konkreten Implementierung eines Interfaces durch übergebenen String Allgemeine Java-Themen 2
K Objekt-Austausch zwischen zwei Programmen über System-Clipboard Allgemeine Java-Themen 5
S Performance Frage: Objekt oder static? Allgemeine Java-Themen 33
B Speicherverbrauch Objekt-Referenz Allgemeine Java-Themen 11

Ähnliche Java Themen

Anzeige

Neue Themen


Oben