示例
- Maven依赖
cglib
cglib
3.3.0
- 功能类
public class EmpDaoImpl {
public boolean delete(Integer empno) {
System.out.println("删除指定编号的员工");
return false;
}
}
- 功能增强
public class LogHandler implements MethodInterceptor {
private Enhancer enhancer = new Enhancer();
public Object getProxy(Object clazz) {
enhancer.setSuperclass(clazz.getClass());
enhancer.setCallback(this);
return enhancer.create();
}
@Override
public Object intercept(Object obj, Method method,
Object[] args, MethodProxy proxy) throws Throwable {
System.out.println("前置代理");
Object res = proxy.invokeSuper(obj, args);
System.out.println("后置代理");
return res;
}
}
- 测试代码
public static void main(String[] args) {
LogHandler hander = new LogHandler();
EmpDaoImpl proxy = (EmpDaoImpl) hander.getProxy(new EmpDaoImpl());
proxy.delete(3);
}
结果:
在JDK11(包含)之上的环境中运行本程序会报如下图所示的错误:
要想正确运行,需要做如下配置:
Eclipse 然后在VM中添加内容:
--add-opens java.base/java.lang=ALL-UNNAMED