java动态代理
定义动态代理类DynamicProxy
package com.zte.adc.common;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class DynamicProxy implements InvocationHandler {
private Object object;
// 绑定关系,也就是关联到哪个接口(与具体的实现类绑定)的哪些方法将被调用时,执行invoke方法。
// Proxy.newProxyInstance的第三个参数是表明这些被拦截的方法执行时需要执行哪个InvocationHandler的invoke方法
public Object bindRelation(Object object) {
this.object = object;
return Proxy.newProxyInstance(object.getClass().getClassLoader(),
object.getClass().getInterfaces(), this);
}
// 拦截关联的这个实现类的方法被调用时将被执行,只要是代理的类执行方法 首先经过invoke方法
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
if ("queryForList".equals(method.getName()) && args.length == 4) {
args[2] = (Integer) args[2] - 1;
}
Object result = method.invoke(object, args);
return result;
}
}
获得动态代理的代理对象 注意动态代理返回的对象必须是被代理对象的接口
public SqlMapClientTemplate sqlTemplate1 = this.getSqlMapClientTemplate();
public SqlMapClientOperations sqlTemplate=null;//这里1
private DynamicProxy dp = new DynamicProxy();
{
sqlTemplate= (SqlMapClientOperations)dp.bindRelation(sqlTemplate1);
}
public BaseSqlMapDao() {
}
如果在 “这里1”中用的不是SqlMapClientTemplate 的借口 而是直接用的SqlMapClientTemplate 那么
就会抛出异常
动态代理的原理就是通过动态代理类DynamicProxy 生成了一个新的对象 Proxy对象
该新对象继承的接口就是原对象的接口,产生的新对象并不是源对象的实例 而是产生的代理对象的实例
相关文档:
1、Collection 和 Collections的区别。
Collections是个java.util下的类,它包含有各种有关java集合操作的静态方法。
Collection是个java.util下的接口,它是各种java集合结构的父接口
2、List, Set, Map是否继承自Collection接口? List,Set是 Map不是
3、ArrayList和Vector的区别。
(1).同步性:Vector是线程 ......
package thread;
public class ThreadTest {
public static void main(String args[])
{
//new TestThread ().start();
TestThread tt= new TestThread();//创建TestThread类的一个实例
Thread t= new Thread(tt);//创建一个Thread类的实例
t.start();//使线程进入Runnable状态
new Thread(tt).star ......
不管你是新手还是老鸟,在程序中读取资源文件总会遇到一些找不到文件的问题,这与Java底层的实现有关,不能算bug,只要方法得当,问题还是可以解决的。
项目的文件夹结构:
repathtest
├─src
│ └─com
│ &nb ......
java 代码
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList; ......