代码实现:
-
-
newProxyInstance(ClassLoader loader, 类<?>[] interfaces, InvocationHandler h)
-
三个参数:
1)类加载器
2)增强方法所在的类,这个类实现的接口,支持多个接口
3)实现这个接口 InvocationHandler,创建代理对象,写增强的部分
代码实现:
1.创建userDao
package com.atguigu.spring5;
public interface UserDao {
public int add(int a,int b);
public String update(String name);
}
2.userDaoImpl
package com.atguigu.spring5;
public class UserdaoImpl implements UserDao{
@Override
public int add(int a, int b) {
return a+b;
}
@Override
public String update(String name) {
return name;
}
}
3.加强测试
package com.atguigu.spring5;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Arrays;
public class JDKProxy {
public static void main(String[] args) {
Class[] interfaces={UserDao.class};
UserdaoImpl userDao=new UserdaoImpl();
UserDao dao =(UserDao) Proxy.newProxyInstance(JDKProxy.class.getClassLoader(), interfaces, new userDaoProxy(userDao));
// int result1 = dao.add(1, 4);
String result2=dao.update("Sjjddj");
System.out.println("result2:"+result2);
}
}
class userDaoProxy implements InvocationHandler {
private Object obj;
public userDaoProxy(Object obj){
this.obj=obj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//方法执行之前
Object res;
if(method.getName().equals("add")){
System.out.println("add方法执行之前.." +method.getName()+":传递的参数:"+ Arrays.toString(args));
res=method.invoke(obj,args);
System.out.println("add方法执行之后:"+obj);
}else{
res=method.invoke(obj,args);
System.out.println("uopdate 加强方法");
}
//加强方法被执行
//方法执行之后
return res;
}
}
测试截图: