Proxy proxy = Proxy.newProxyInstance(1,2,3); //proxy加载需要三个条件 注意 使用动态代理的时候 代理的对象必须是接口 //1,类加载器 interfaceType是需要代理的类!!! ClassLoader classLoader = interfaceType.getClassLoader(); //2,需要加载的类数组(一般只需要一个) Class[] classes = new Class[]{interfaceType}; //3,具体该怎么做InvocationHandler 接口 具体实现接口 告知具体如何做事 InvocationHandler invocationHandler = new InvocationHandler() { //这里的代理做的是interface类的原来做的事情 //实现的具体的子类里面的三个参数分别是: //1,proxy 是代理的对象 //2,method 是被代理的方法 //3,args 是被代理的方法里面的参数 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //具体的代理怎么做呢? 比如原来的被代理的类里面的某个方法就是调用了其他的方法 //所以代理对象需要做的也就是调用其他的方法 //1,调用那个方法?----比如通过在dao中取决于@Inseret注解调用什么注解 //1.1获取当前代理的方法的上面的注解 //不确定注解是什么 直接获取所有类型的注解,且只有一个注解 只用获取到[0]索引 Annotation a = method.getAnnotations()[0]; //1.2获取注解的类型 Class type = a.getClass(); //1.3通过反射找到注解里的value的方法 //这个方法里面拥有注解里面的参数----sql Method method1 = type.getMethod("value"); //1.4获取里面的sql需要执行一下这个方法 String sql = (String) method.invoke(a); return null; } };