0%

CGLib动态代理

文章字数:75,阅读全文大约需要1分钟

  • 创建一个类
1
2
3
4
5
public class UserServiceImpl {
public void add() {
System.out.println("添加了一个用户");
}
}
  • 代理类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class UserServiceCGlib implements MethodInterceptor {
private Object target;

public UserServiceCGlib(Object target) {
this.target = target;
}

public Object getProxyInstance() {
// 工具类
Enhancer enhancer = new Enhancer();
// 设置父类
enhancer.setSuperclass(target.getClass());
// 设置回调函数
enhancer.setCallback(this);
// 创建代理
return enhancer.create();
}

@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
System.out.println("before");
Object result = methodProxy.invokerSuper(o, object);
System.out.println("after");
return result;
}
}
  • 使用
1
2
3
UserServiceCGlib serviceCGlib = new UserServiceCGlib(new UserServiceImpl());
UserServiceImpl userService = (UserServiceImpl)serviceCGlib.getProxyIntance();
userService.addUser();