UserDao dao =new UserDaoImpl();//目标类
UserDao proxy=(UserDao)Proxy.newProxyInstance(
dao.getClass().getClassLoader(),
dao.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("开启");
Object object=method.invoke(dao, args);//dao是目标对象,参数默认
System.out.println("关闭");
return null;
}
});
proxy.addUser();
Dao是目标类,Proxy是代理类。本方法采用的是jdk动态代理方法。
第一个参数需要的是类加载器。所以是目标类dao的getClass().getClassLoader()。
第二个参数是要获取目标类的所有接口方法,即dao.getClass().getInterfaces()。
第三 实现一个InvocationHandle必须实现invoke方法