依赖maven cglib库
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib-nodep</artifactId>
<version>2.2</version>
</dependency>
1.定义真实对象类并写真实的业务逻辑处理。
public class Customer {
public void findLove(){
System.out.println("儿子要求:肤白貌美大长腿");
}
}
2.定义代理对象
public class CGlibMeipo implements MethodInterceptor {
//1.定义接受真实对象处理,返回一个代理对象
public Object getInstance(Class<?> clazz) throws Exception{
//相当于Proxy,代理的工具类
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(clazz);
enhancer.setCallback(this);
return enhancer.create();
}
/*
o:被代理的对象。即原始对象,也就是目标类的实例。
method:要被调用的方法对象。即将要执行的目标方法。
objects:方法的参数数组。即目标方法的参数列表。
methodProxy:方法的代理对象。通过该对象可以调用目标方法。使用methodProxy.invokeSuper(o, objects)可以触发目标方法的执行。
*/
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
before();
Object obj = methodProxy.invokeSuper(o,objects);
after();
return obj;
}
private void before(){
System.out.println("我是媒婆,我要给你找对象,现在已经确认你的需求");
System.out.println("开始物色");
}
private void after(){
System.out.println("OK的话,准备办事");
}
}
3.测试
public class CglibTest {
public static void main(String[] args) {
try {
System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY,"E://cglib_proxy_classes");//打印代理对象生成的class文件
//CGlibMeipo代理对象绑定真实对象并返回代理对象
Customer obj = (Customer) new CGlibMeipo().getInstance(Customer.class);
//执行代理对象方法并调用真实对象
obj.findLove();
} catch (Exception e) {
e.printStackTrace();
}
}
}