动态代理(基于接口的动态代理)
动态代理(基于子类的动态代)
demo
service
public interface StudentService {
void saveStudent(int id);
void deleteStudentById(int id);
}
serviceImpl
public class StudentServiceImpl implements StudentService{
@Override
public void saveStudent(int id) {
System.out.println("存储了一个ID为:"+id+"的学生信息");
//int a=1/0;
}
@Override
public void deleteStudentById(int id) {
System.out.println("删除一个ID为:"+id+"的学生信息");
}
Test
public class TestSpring {
public static void main(String[] args) {
// 动态代理(基于接口的动态代理)
StudentServiceImpl stdImpl = new StudentServiceImpl();
StudentService serviceproxy = (StudentService) Proxy.newProxyInstance(stdImpl.getClass().getClassLoader(),
stdImpl.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object rtvalue = null;
int id=(int)args[0];
if ("saveStudent".equals(method.getName())) {
if(id>0) {
rtvalue=method.invoke(stdImpl, id);
}
}
if ("deleteStudentById".equals(method.getName())) {
if (id>0) {
rtvalue=method.invoke(stdImpl, id);
}
}
return rtvalue;
}
});
serviceproxy.saveStudent(10);
serviceproxy.deleteStudentById(10);
//基于子类动态代理(需要导包:cglib、,asm)
StudentServiceImpl cglibStudent=(StudentServiceImpl) Enhancer.create(stdImpl.getClass(), new MethodInterceptor() {
@Override
public Object intercept(Object proxy, Method method, Object[] arg, MethodProxy methodProxy) throws Throwable {
Object rtvalue = null;
int id=(int)arg[0];
if ("saveStudent".equals(method.getName())) {
if(id>0) {
rtvalue=method.invoke(stdImpl, id);
}
}
if ("deleteStudentById".equals(method.getName())) {
if (id>0) {
rtvalue=method.invoke(stdImpl, id);
}
}
return rtvalue;
}
});
cglibStudent.saveStudent(10);
cglibStudent.deleteStudentById(10);
}
}