How to define a new method and intercept and delegate a call to that method?












0















I am solving a problem for a school work. let us say I have a class as follows



class test {

public String foo(int i) {
printvalue(i);
return "foo";
}

public void printvalue(int i) {
System.out.println(i);
}
}

class Solution {
public static void main(String args) {

System.out.println(new test().foo(10));
}
}


output is



10
foo



Now I'm creating a java agent which will intercept all calls to foo and I want to create a new method in bar as follows and replace all calls to foo to just call bar(int i) and then return.



public String bar(int i) {
printvalue(i);
return "bar";
}


so the output of main should change to



10
bar



How can I achieve this. I was looking to use bytebuddy or javassist to do this. Any help is appreciated










share|improve this question

























  • You can check aspect oriented programming in java. Write a decorator to intercept the call.

    – Lokesh Agrawal
    Jan 1 at 17:26
















0















I am solving a problem for a school work. let us say I have a class as follows



class test {

public String foo(int i) {
printvalue(i);
return "foo";
}

public void printvalue(int i) {
System.out.println(i);
}
}

class Solution {
public static void main(String args) {

System.out.println(new test().foo(10));
}
}


output is



10
foo



Now I'm creating a java agent which will intercept all calls to foo and I want to create a new method in bar as follows and replace all calls to foo to just call bar(int i) and then return.



public String bar(int i) {
printvalue(i);
return "bar";
}


so the output of main should change to



10
bar



How can I achieve this. I was looking to use bytebuddy or javassist to do this. Any help is appreciated










share|improve this question

























  • You can check aspect oriented programming in java. Write a decorator to intercept the call.

    – Lokesh Agrawal
    Jan 1 at 17:26














0












0








0








I am solving a problem for a school work. let us say I have a class as follows



class test {

public String foo(int i) {
printvalue(i);
return "foo";
}

public void printvalue(int i) {
System.out.println(i);
}
}

class Solution {
public static void main(String args) {

System.out.println(new test().foo(10));
}
}


output is



10
foo



Now I'm creating a java agent which will intercept all calls to foo and I want to create a new method in bar as follows and replace all calls to foo to just call bar(int i) and then return.



public String bar(int i) {
printvalue(i);
return "bar";
}


so the output of main should change to



10
bar



How can I achieve this. I was looking to use bytebuddy or javassist to do this. Any help is appreciated










share|improve this question
















I am solving a problem for a school work. let us say I have a class as follows



class test {

public String foo(int i) {
printvalue(i);
return "foo";
}

public void printvalue(int i) {
System.out.println(i);
}
}

class Solution {
public static void main(String args) {

System.out.println(new test().foo(10));
}
}


output is



10
foo



Now I'm creating a java agent which will intercept all calls to foo and I want to create a new method in bar as follows and replace all calls to foo to just call bar(int i) and then return.



public String bar(int i) {
printvalue(i);
return "bar";
}


so the output of main should change to



10
bar



How can I achieve this. I was looking to use bytebuddy or javassist to do this. Any help is appreciated







javassist byte-buddy






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Jan 1 at 16:56







user3450935

















asked Jan 1 at 4:59









user3450935user3450935

11




11













  • You can check aspect oriented programming in java. Write a decorator to intercept the call.

    – Lokesh Agrawal
    Jan 1 at 17:26



















  • You can check aspect oriented programming in java. Write a decorator to intercept the call.

    – Lokesh Agrawal
    Jan 1 at 17:26

















You can check aspect oriented programming in java. Write a decorator to intercept the call.

– Lokesh Agrawal
Jan 1 at 17:26





You can check aspect oriented programming in java. Write a decorator to intercept the call.

– Lokesh Agrawal
Jan 1 at 17:26












1 Answer
1






active

oldest

votes


















0














This is possible in Byte Buddy by using a MemberSubstitution. In the DSL, you can write:



MemberSubstitution.relaxed()
.method(ElementMatchers.named("foo"))
.replaceWith(ElementMatchers.named("bar"))


You can register this visitor using an AgentBuilder that implements the agent.



You can implement a custom method using the builder DSL where you can provide the implementation as a combination of MethodCall and FixedValue.






share|improve this answer























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53993108%2fhow-to-define-a-new-method-and-intercept-and-delegate-a-call-to-that-method%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    This is possible in Byte Buddy by using a MemberSubstitution. In the DSL, you can write:



    MemberSubstitution.relaxed()
    .method(ElementMatchers.named("foo"))
    .replaceWith(ElementMatchers.named("bar"))


    You can register this visitor using an AgentBuilder that implements the agent.



    You can implement a custom method using the builder DSL where you can provide the implementation as a combination of MethodCall and FixedValue.






    share|improve this answer




























      0














      This is possible in Byte Buddy by using a MemberSubstitution. In the DSL, you can write:



      MemberSubstitution.relaxed()
      .method(ElementMatchers.named("foo"))
      .replaceWith(ElementMatchers.named("bar"))


      You can register this visitor using an AgentBuilder that implements the agent.



      You can implement a custom method using the builder DSL where you can provide the implementation as a combination of MethodCall and FixedValue.






      share|improve this answer


























        0












        0








        0







        This is possible in Byte Buddy by using a MemberSubstitution. In the DSL, you can write:



        MemberSubstitution.relaxed()
        .method(ElementMatchers.named("foo"))
        .replaceWith(ElementMatchers.named("bar"))


        You can register this visitor using an AgentBuilder that implements the agent.



        You can implement a custom method using the builder DSL where you can provide the implementation as a combination of MethodCall and FixedValue.






        share|improve this answer













        This is possible in Byte Buddy by using a MemberSubstitution. In the DSL, you can write:



        MemberSubstitution.relaxed()
        .method(ElementMatchers.named("foo"))
        .replaceWith(ElementMatchers.named("bar"))


        You can register this visitor using an AgentBuilder that implements the agent.



        You can implement a custom method using the builder DSL where you can provide the implementation as a combination of MethodCall and FixedValue.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Jan 5 at 17:51









        Rafael WinterhalterRafael Winterhalter

        28k1367145




        28k1367145
































            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53993108%2fhow-to-define-a-new-method-and-intercept-and-delegate-a-call-to-that-method%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            MongoDB - Not Authorized To Execute Command

            How to fix TextFormField cause rebuild widget in Flutter

            in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith