Hi Alexander, You told me that what I explained, that is not possible. Believe it or not, this was helpful. Thank you.
I already use AspectJ in some scenarios and I think this is awesome. On the other hand, this does not seem to fit this scenario, and that's OK. Cheers, Tamas On Tue, Jun 18, 2019 at 12:42 PM Alexander Kriegisch < alexan...@kriegisch.name> wrote: > You give up quickly and you think you know that AspectJ is not helpful > even though you haven't laid out the problem. Give it a try. As a developer > you should be able to explain the problem without disclosing company > internals. > > Maybe binary weaving would be a quick and easy solution for you if e.g. > you have binaries without source. But if you don't explain, probably we > will never know, will we? How can you hope for someone to help you solve a > problem you don't even fully explain? > > Good luck > -- > Alexander Kriegisch > > > -------- Ursprüngliche Nachricht -------- > Von: REV Tamas <tamas....@gmail.com> > Datum: 18.06.19 15:42 (GMT+07:00) > An: aspectj-users@eclipse.org > Betreff: Re: [aspectj-users] privileged aspects and Load-Time Weaving > > Hello, > > Thank you for your detailed answer! > > I don't think I may explain our situation. > All I can say is that I'm looking for the least painful shortcut. Now I > know that this is not AspectJ. > So I keep looking. > > Thanks, > Tamas > > On Tue, Jun 18, 2019 at 3:57 AM Alexander Kriegisch < > alexan...@kriegisch.name> wrote: > >> The problem is not privileged access, you are rather dealing with a >> *hen-and-egg* type of problem here. Let's imagine you want a setup like >> this: >> >> - Aspect library (to be used via LTW) >> - AspectPrivate >> - Application >> - ClassWithPrivate >> - TestPrivate >> >> Now probably you don't want any dependencies between aspect library and >> application, but >> >> - the aspect imports an application class, >> - the test program is trying to access methods unavailable during its >> compile time, >> - thus the aspect library has a dependency on the application library >> and vice versa. >> >> Ergo: It simply does not make sense to use AspectJ's introduction feature >> (also known as ITD or inter-type declaration) like this in an LTW scenario. >> In most cases AOP is about adding cross-cutting behaviour and there you can >> work with jokers like "*" or "..", i.e. you do not need to use precise >> class names. Even if you do, the worst that could happen is an "advice does >> not match" warning during compilation of the aspect library. It would still >> work during runtime after aspect weaving. But member access and/or method >> introduction only work with specific class names, so if you need that you >> should use compile-time weaving. Think about it, you are not just >> decorating classes with behaviour before or after existing methods, you are >> introducing new members or methods, i.e. changing the class structure >> itself. This is to be done during compile time. >> >> So much for the technical part. I still think your question might be >> suffering from the XY problem >> <https://meta.stackexchange.com/a/66378/309898>. Maybe you should rather >> explain *what* you want to achieve and not *how* you think it should >> best be achieved. Ask yourself questions like: >> >> - Why would I want to access private class members in the first place? >> - What happens if I refactor the target class, e.g. rename a member? >> (In your example the aspect would break and need to be refactored too.) >> - Why am I limited to LTW here? Or maybe I just think I am and there >> are other possible solutions. >> - What is it I want to achieve? (Maybe your answer is: "I want to >> reduce boiler-plate code and auto-generate getters and setters for all or >> some of my beans." And maybe then you find out that you could do that via >> AspectJ's annotation processing feature or by using another tool such as >> Lombok or by using Groovy instead of Java or ...) >> >> Kind regards >> -- >> Alexander Kriegisch >> https://scrum-master.de >> >> >> REV Tamas schrieb am 17.06.2019 18:35: >> >> Hello, >> >> I would like to use a privileged access and weave it at load-time. >> I did not see anywhere that it was not possible to do so. >> On the other hand, I could only make it work with compile-time weaving so >> far. >> Could you please help me to make it work (or just tell me it is not >> possible)? >> >> I was playing with this mock project: >> https://stackoverflow.com/questions/10721037/aspectj-access-private-fields >> Code excerpt: >> >> public class ClassWithPrivate { >> private String s = "myStr"; >> } >> >> ========== >> package com.example.aspect; >> import com.example.ClassWithPrivate; >> >> privileged public aspect AccessPrivate { >> >> public String ClassWithPrivate.getS() { >> return this.s; >> } >> >> public void ClassWithPrivate.setS(String str) { >> this.s = str; >> } >> } >> >> ========== >> package com.example; >> public class TestPrivate { >> >> public static void main(String[] args) { >> >> ClassWithPrivate test = new ClassWithPrivate(); >> System.out.println(test.getS()); >> test.setS("hello"); >> System.out.println(test.getS()); >> } >> } >> >> >> I installed ADT to eclipse and now I can see the aspect weaved into the >> bytecode. >> I saw this when I decompiled the code: >> public class ClassWithPrivate >> { >> public void setS(String paramString) >> { >> >> AccessPrivate.ajc$interMethod$com_example_aspect_AccessPrivate$com_example_ClassWithPrivate$setS(this, >> paramString); >> } >> >> public String getS() >> { >> return >> AccessPrivate.ajc$interMethod$com_example_aspect_AccessPrivate$com_example_ClassWithPrivate$getS(this); >> } >> >> private String s = "mystr"; >> } >> So here is the question: Is it possible to do it with load-time weaving? >> I disabled ADT, then I added the aspect to the aop.xml as I normally do. >> However, >> the class that tried to access the privileged methods, that gave a >> compile error. >> >> Thanks, >> Tamas >> >> _______________________________________________ >> aspectj-users mailing list >> aspectj-users@eclipse.org >> To change your delivery options, retrieve your password, or unsubscribe >> from this list, visit >> https://www.eclipse.org/mailman/listinfo/aspectj-users > > _______________________________________________ > aspectj-users mailing list > aspectj-users@eclipse.org > To change your delivery options, retrieve your password, or unsubscribe > from this list, visit > https://www.eclipse.org/mailman/listinfo/aspectj-users
_______________________________________________ aspectj-users mailing list aspectj-users@eclipse.org To change your delivery options, retrieve your password, or unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/aspectj-users