一、引入依赖
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2.2</version>
</dependency>
二、被代理类
public class TrainStation {
public void sell() {
System.out.println("火车站卖票");
}
}
三、代理工厂类
/**
* 获取代理对象
*/
public class ProxyFactory implements MethodInterceptor {
private TrainStation station = new TrainStation();
public TrainStation getProxyObject (){
//enhancer 对象,类似于jDK中的 $proxy0 代理类
Enhancer enhancer = new Enhancer();
//指定父类
enhancer.setSuperclass(TrainStation.class);
//this代指下面的intercept()方法
enhancer.setCallback(this);
//创建代理对象
TrainStation proxyObject = (TrainStation) enhancer.create();
return proxyObject;
}
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
//这里是增强的内容
System.out.println("中间商赚差价--cglib");
//调用目标对象的方法,method为TrainStation的sell()方法
Object obj = method.invoke(station, objects);
return obj;
}
}
四、使用方法
public class Client {
public static void main(String[] args) {
ProxyFactory factory = new ProxyFactory();
//获取代理对象,TrainStation类的子类对象
TrainStation proxyObject = factory.getProxyObject();
proxyObject.sell();
}
}
-----------------------------------------------------------
中间商赚差价--cglib
火车站卖票