Javassist代理demo
阿新 • • 發佈:2018-12-18
什麼是javassist ?
javassist是一個開源的生成java位元組碼的類庫,其優點在於簡單,快速,直接使用javassist就可以動態生成javaBean,或修改類的結構
使用javassist實現動態代理
1.準備需要的jar包
<dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> <version>3.24.0-GA</version> </dependency>
2.建立被代理的類
public class Person {
private String userId;
private String password;
private String username;
private Integer age;
/** setter|getter **/
public void writeWork() {
System.out.println("student is writeing homework ...");
}
3.建立代理類
public class JavassisForPerson { @SuppressWarnings("deprecation") public static void main(String[] args) throws Exception { ProxyFactory proxyFactory = new ProxyFactory(); //指定父類/proxtfactory會自動生成繼承該類的子類 proxyFactory.setSuperclass(Person.class); //設定過濾器,判斷哪些方法需要被攔截 proxyFactory.setFilter((m) ->{ if(m.getName().equals("writeWork")) { return true; } return false; }); //設定攔截代理 proxyFactory.setHandler((self,thisMethod,proceed,arg) ->{ System.out.println("前置通知"); Object object = proceed.invoke(self, arg); System.out.println("後置通知"); return object; }); //建立Person代理類,並建立物件 Class<?> class1 = proxyFactory.createClass(); Person person = (Person) class1.newInstance(); person.writeWork(); } }
4.執行結果