How to define a new method and intercept and delegate a call to that method?
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
add a comment |
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
You can check aspect oriented programming in java. Write a decorator to intercept the call.
– Lokesh Agrawal
Jan 1 at 17:26
add a comment |
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
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
javassist byte-buddy
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
add a comment |
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
add a comment |
1 Answer
1
active
oldest
votes
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
.
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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
.
add a comment |
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
.
add a comment |
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
.
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
.
answered Jan 5 at 17:51
Rafael WinterhalterRafael Winterhalter
28k1367145
28k1367145
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
You can check aspect oriented programming in java. Write a decorator to intercept the call.
– Lokesh Agrawal
Jan 1 at 17:26