动态代理增强
1.接口
package service;
public interface AccountService {
String FindAll();
void save(String str);
void update();
void delete();
}
2.接口实现类
package service.Impl;
import service.AccountService;
public class AccountServiceImpl implements AccountService {
@Override
public String FindAll() {
System.out.println("fandAll...");
return "result:fandAll";
}
@Override
public void save(String str) {
System.out.println("save..." );
}
@Override
public void update() {
System.out.println("update..");
}
@Override
public void delete() {
System.out.println("delete...");
}
}
3.动态代理增强类`
package proxy;
import org.junit.Test;
import service.AccountService;
import service.Impl.AccountServiceImpl;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Arrays;
public class DemoProxy {
public static void main(String[] args) {
AccountServiceImpl as = new AccountServiceImpl();
AccountService proxy = (AccountService) Proxy.newProxyInstance(as.getClass().getClassLoader(), as.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
String name = method.getName();
System.out.println("当前执行的方法名称为:" + name);
Object result = null;
System.out.println("前增强1111111");
result = method.invoke(as, args);
System.out.println("后增强222222");
return result;
}
});
proxy.update();
proxy.delete();
}
/*
API: Proxy
static Object newProxyInstance(
ClassLoader loader, // 类加载器,将生成的代理类加载到内存
Class<?>[] interfaces, // 代理类需要实现的接口字节码(被代理类的接口)
InvocationHandler h) // 调用处理,在代理类中对方法进行增强
*/
@Test
public void test1() {
AccountService proxy = (AccountService) Proxy.newProxyInstance(DemoProxy.class.getClassLoader(), new Class[]{AccountService.class}, new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
String name = method.getName();
Object result = null;
if ("findAll".equals(name)) {
System.out.println("findAll方法执行了...");
result = "findAll方法的返回值";
} else if ("save".equals(name)) {
System.out.println("sava方法的参数:" + Arrays.toString(args));
System.out.println("save方法执行了...");
} else if ("update".equals(name)) {
System.out.println("update方法执行了");
} else if ("delete".equals(name)) {
System.out.println("delete方法执行了");
}
return result;
}
});
String s = proxy.FindAll();
System.out.println(s);
proxy.delete();
proxy.save("哈哈哈");
}
}```
API: Proxy
static Object newProxyInstance(
ClassLoader loader, // 类加载器,将生成的代理类加载到内存
Class<?>[] interfaces, // 代理类需要实现的接口字节码(被代理类的接口)
InvocationHandler h) // 调用处理,在代理类中对方法进行增强