目标类
public class PersonService {
private String username;
public String getUsername() {
return username;
}
public PersonService(String username){
this.username = username;
}
public void say() {
System.out.println("我的名字叫"+username);
}
}
代理类(实现MethodInterceptor接口)
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Date;
public class CglibProxyInterceptor implements MethodInterceptor {
private Enhancer enhancer = new Enhancer();
public Object getProxyInstance(Class target){
enhancer.setSuperclass(target);
enhancer.setCallback(this);
return enhancer.create(new Class[]{String.class},new String[]{"geng"} );
}
@Override
public Object intercept(Object obj, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
System.out.println("-----------------前置通知开始----------------");
System.out.println("正在执行前置通知");
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-mm-dd");
String currentDate = simpleDateFormat.format(new Date());
System.out.println("[" + currentDate + "]:" + "新增一个人");
System.out.println("-----------------前置通知结束----------------");
methodProxy.invokeSuper(obj, objects);
System.out.println("-----------------后置通知开始----------------");
System.out.println("正在执行后置通知");
System.out.println("-----------------后置通知结束----------------");
return null;
}
}
测试类
public class Main {
public static void main(String[] args) throws ClassNotFoundException {
PersonService proxy = (PersonService) new CglibProxyInterceptor().getProxyInstance(PersonService.class);
proxy.say();
}
}
运行结果
-----------------前置通知开始----------------
正在执行前置通知
[2018-13-21]:新增一个人
-----------------前置通知结束----------------
我的名字叫geng
-----------------后置通知开始----------------
正在执行后置通知
-----------------后置通知结束----------------