什么是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.运行结果