Javassist og methodwrapper
Jeg har en class FooEntity og Bar:-------------------------
public class FooEntity {
private String foo;
private String bar;
public String getFoo() {return foo;}
public void setFoo(String foo) {this.foo = foo;}
public String getBar() {return bar;}
public void setBar(String bar) {this.bar = bar;}
}
public class Bar {
public boolean isBar(String propertyName) {
return "bar".equals(propertyName);
}
}
-------------------------
Nu vil jeg adde en field som har type Bar. Desuden vil jeg wrappe mine getter og setter.
Resultatet skal ligne noget i denne stil:
-------------------------
public class FooEntity {
private String foo;
private String bar;
private Bar b; // ny field
public String getFoo() {
if (b.isBar("foo")) {
return null;
}
return foo;
}
public void setFoo(String foo) {
if (b.isBar("foo")) {
return;
}
this.foo = foo;
}
public String getBar() {
if (b.isBar("bar")) {
return null;
}
return bar;
}
public void setBar(String bar) {
if (b.isBar("bar")) {
return;
}
this.bar = bar;
}
}
-------------------------
...
public static void main(String[] args) throws Exception {
// change FooEntity with javassist
Bar b = new Bar();
FooEntity fooEntity = new FooEntity();
Field bField = fooEntity.getDeclaredField("b");
bField.set(fooEntity, b);
fooEntity.setFoo("abc");
fooEntity.setBar("abc");
System.out.println(fooEntity.getFoo()); // null
System.out.println(fooEntity.getBar()); // "bar"
}
...
Mine spoergsmaal er:
1. Hvordan kan jeg adde et field som har en Type som ikke er primitiv?
2. Hvordan kan jeg wrappe en eksisterende method?
Mange tak og venlig hilsen
KernelX