cglib代理是建立一个类的子类,然后通过这个子类去访问原来的类。
package jyl.mix.proxy.cglib;
import java.lang.reflect.Method;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;
public class MyMethodInterceptor implements MethodInterceptor {
private Logger logger = LoggerFactory.getLogger(this.getClass());
/**
* cglib
*/
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy)
throws Throwable {
logger.info("before method invoke," + method.toString());
Object retObj = methodProxy.invokeSuper(o, objects);
logger.info("after method invoke," + method.toString());
return retObj;
}
}
package jyl.mix.proxy.cglib;
/**
*/
public class Student {
private Integer id;
private String name;
public Student(Integer id, String name) {
this.setId(id);
this.setName(name);
}
public void showInfo() {
System.out.println("name=" + name + ", id=" + id);
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package jyl.mix.proxy.cglib;
import org.springframework.cglib.proxy.Enhancer;
public class TestProxy {
/**
* cglib代理模式
* 生成类的代理子类,调用superClass的方法
* @param args
*/
public static void main(String[] args){
MyMethodInterceptor methodInterceptor = new MyMethodInterceptor();
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(Student.class);
enhancer.setCallback(methodInterceptor);
Student student = (Student)enhancer.create(new Class<?>[]{Integer.class, String.class}
,new Object[]{123,"xiaoming"}) ;
student.showInfo();
}
}