CGLIB动态代理
导入cglib的jar包
// 代理模式中的 创建 目标对象 target
public class UserServiceImpl{
//@Override
public String holle(String msg) {
System.out.println("目标对象 : " + msg);
return "holle";
}
//@Override
public void fig(String msg) {
System.out.println("fig ---------" + msg);
}
}
// 代理对象的工厂类型
// 创建代理对象
public class CglibProxyFactory implements MethodInterceptor {
//目标对象
private UserServiceImpl target;
public CglibProxyFactory(UserServiceImpl target) {
super();
this.target = target;
}
/**
* 创建代理对象的方法
* @return
*/
public UserServiceImpl createProxyInstance() {
//获取Enhancer 对象
Enhancer enhancer = new Enhancer();
//设置对应的父类
enhancer.setSuperclass(UserServiceImpl.class);
//设置回调的对象
enhancer.setCallback(this);
//返回代理对象
return (UserServiceImpl) enhancer.create();
}
//代理对象具体执行的方法
@Override
public Object intercept(Object arg0, Method method, Object[] args, MethodProxy arg3) throws Throwable {
System.out.println("---befor---");
Object obj = method.invoke(target, args);
//System.out.println(obj);
System.out.println("---after---");
return obj;
}
}
//测试
public class Stsrt {
public static void main(String[] args) {
//创建目标对象
UserServiceImpl target = new UserServiceImpl();
//创建代理对象的工厂
CglibProxyFactory factory = new CglibProxyFactory(target);
//通过工厂工厂对象获取对应的代理对象
UserServiceImpl Proxy = factory.createProxyInstance();
//通过代理对象执行方法
Proxy.holle("你好");
Proxy.fig("我好");
}
}
结果:
---befor---
目标对象 : 你好
---after---
---befor---
fig ---------我好
---after---