ERLEDIGT
NEIN
NEIN
ANTWORTEN
7
7
ZUGRIFFE
485
485
EMPFEHLEN
-
Hallo!
Wir entwickeln eine Webanwednung mit Eclipse + JBoss + sehr vielen Projekten.
Nun wollen wir produktiv einige Sachen mitloggen.
Hierfür habe ich mir AspectJ angesehen und auch einiges hin bekommen.
Nun stehe ich aber vor einem kleinen Problem.
Zuerst einmal eine Frage ob das so richtig ist?:
Wir haben ein eigenes AspectJ-Projekt wo wir ein ein .aj-File haben wo alle Pointcuts und Advises drin sind.
Alle Projekte von unserer Anwendung welche geloggt werden sollen hab ich in AspectJ-Projekte umgewandelt und unter Projekt-Properties - AspectJ Build - Aspect Path füge ich das AspectJ-Projekt mittels Add Project ein.
Wenn ich dann das EAR erstelle funktioniert alles und es werden auch die Methoden die ich angegeben habe geloggt.
Nun die eigentliche Frage...wie kann ich auf private variablen einer Klasse zugreifen?
Hier ein kurzes Bespiel:
Projekt1:
Test.java
TestAspect.java
Code :1 2 3 4 5 6 7 8 9 10
public class Test { private String thePrivateVariable = "1234"; public void testit(String msg) { System.out.println("Bin ein Test"); System.out.println(thePrivateVariable + " | " + msg); } }
Code :1 2 3 4 5 6 7 8 9 10
public class TestAspect { /** * @param args */ public static void main(String[] args) { Test te = new Test(); te.testit("zahl"); }
Projekt2:
World.aj
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
public privileged aspect World { pointcut testlog( String string) : ( execution( * testit(String)) && args(string)); Object around( String string ) : testlog( string) { Object result; result = proceed(string); System.out.println("Im Aspect | msp : " + string); // Zugriff auf Test.thePrivateVariable ? return result; } }
In Project1 gebe ich in Aspect Path das Project2 an.
Wie kann ich nun im den around-Advise auf die private Variable thePrivateVariable zugreifen?
Den Aspect (World.aj) wollen wir nicht in das selbe Projekt geben da wir ja genau ein Projekt haben wollen wo die Aspects drin sind und somit die anderen Projekte kaum ändern müssen.
Vielen Dank für die Hilfe!
mfg
-
Hat jemand eine Idee?
-
13.12.10 10:04 #3
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
versuchs doch mal mit nem priviledged Aspect:
http://tinyurl.com/2utboz9
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Hallo,
die URL funktioniert leider nicht.
Aber wir verwenden den priviledged Aspect schon. Nur weiß ich leider nicht wie ich den poincut gestalten bzw den advise gestalten soll sodass er auf die private Variable zugreifen kann.
lg
-
Hat noch jemand eine Idee?
-
17.01.11 17:21 #6
- Registriert seit
- Jun 2009
- Beiträge
- 870
@hesk
Die URL funktioniert - zumindest bei mirCode bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.Code java:1
System.out.println("Hallo");
___________
Ubuntu Bug #1: Microsoft has a majority market share
Casecon: Projekt leiser Käse
-
Ja..die URL funktioniert bei mir nun auch.
Aber wie schon gesagt... wir verwenden schon priviledged Aspect.
Wir wissen nur nicht wie man auf eine private Variable zugreifen können(siehe Beispiel ganz oben)
-
18.01.11 10:21 #8
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
hier mal ein kleines Beispiel:
Mit 3 Projekten: test1 (Anwendungsklassen), testaspects (Aspekte), test2 (Runtime)
In test1:
Code java:
In testaspects:
Java Build Path: test1
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
package de.tutorials.example; import de.tutorials.Service; public privileged aspect TestAspect { pointcut run(Service service) : ( execution( * de.tutorials.Service.run(..)) && target(service)); Object around(Service service) : run(service){ try { System.out.println("Before"); System.out.println("In Aspect: " + service.state); return proceed(service); } finally { System.out.println("After"); } } }
In test2:
AspectJ Build:
Inpath: test1
Aspect Path: testaspects
Code java:1 2 3 4 5 6 7
package de.tutorials; public class Main { public static void main(String[] args) { new Service().run(); } }
Ausgabe:
Code :1 2 3 4
Before In Aspect: starting Service... starting After
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
Ähnliche Themen
-
Logging mit AspectJ in Eclipse
Von xxxAnnaxxx im Forum JavaAntworten: 2Letzter Beitrag: 23.11.10, 21:17 -
AspectJ und Eclipse
Von xxsaikoxx im Forum JavaAntworten: 3Letzter Beitrag: 15.11.10, 09:41 -
AspectJ PointcutDoctor für die Eclipse IDE
Von Thomas Darimont im Forum JavaAntworten: 1Letzter Beitrag: 31.01.09, 17:11 -
Eclipse: mehrere Projekte sollen sich ein Lib-Verzeichnis teilen
Von DarthShader im Forum JavaAntworten: 6Letzter Beitrag: 05.11.08, 15:16





Zitieren

Login





