1.cglib动态代理不需要接口所以普通对象也可以进行代理
public class HiService {
public void hi(String name) {
System.out.println("hi 被代理类 "+name);
}
}
2.cglib动态代理必须实现methodInterceptor接口
public class MyInterceptor implements MethodInterceptor {
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
System.out.println("todo biz 1 ...");
Object result= methodProxy.invokeSuper(o,objects);
System.out.println("todo biz 2 ...");
return result;
}
}
3.测试类,增强器 enhancer 设置superclass ,然后设置callback 方法拦截器,之后增强器创建代理类,通过代理类调用被代理方法。
public class CglibTest {
public static void main(String[] args) {
Enhancer enhancer=new Enhancer();
enhancer.setSuperclass(HiService.class);
enhancer.setCallback(new MyInterceptor());
HiService hiService= (HiService) enhancer.create();
hiService.hi("java");
}
}
4.执行结果
todo biz 1 ...
hi 被代理类 java
todo biz 2 ...