public class UserDaoimpl {
public void insert() {
System.out.println("insert");
}
public void delete() {
System.out.println("delete");
}
public void update() {
System.out.println("update");
}
public void seach() {
System.out.println("search");
}
}
public class Transaction {
public void begin() { System.out.println("begin"); }
public void commit() {
System.out.println("commit");
}
}
public class DaoIntercepter implements MethodInterceptor {
private Object target;
private Transaction transaction;
public DaoIntercepter(Object target, Transaction transaction2) {
this.target = target;
this.transaction = transaction2;
}
/// 子代理对象
public Object createProxy() {
Enhancer enhancer = new Enhancer();
// 设置回调接口
enhancer.setCallback(this);
enhancer.setClassLoader(target.getClass().getClassLoader());
enhancer.setInterfaces(target.getClass().getInterfaces());
// 指定子代理的父类
enhancer.setSuperclass(target.getClass());
// 创建子代理对象
return enhancer.create();
}
// 接口中的回调方法
public Object intercept(Object arg0, Method method, Object[] arg2, MethodProxy arg3) throws Throwable {
String name = method.getName();
if (name.equals("seach")) {
method.invoke(target, arg2);
} else {
transaction.begin();
method.invoke(target, arg2);
transaction.commit();
}
return null;
}
}
public class CglibTest {
public void test() {
UserDaoimpl userDaoimpl = new UserDaoimpl();
Transaction transaction = new Transaction();
DaoIntercepter daoIntercepter = new DaoIntercepter(userDaoimpl, transaction);
UserDaoimpl userDaoimpl1 = (UserDaoimpl) daoIntercepter.createProxy();
userDaoimpl1.insert();
}
}