首先画一个简化的动态代理执行过程图、了解怎么进行动态代理的
演示代理实例
public class DefaultSqlSession implements SqlSession{
@Override
public void selectList(String msg) {
System.out.println("print sql=== execute msg=>"+msg);
}
}
public class MethodProxy implements InvocationHandler {
private Class<?> target;
private SqlSession sqlSession;
public MethodProxy(Class<?>target,SqlSession sqlSession){
this.target=target;
this.sqlSession=sqlSession;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("method proxy execute");
String packageName = target.getName();
String methodName=method.getName();
sqlSession.selectList(packageName+"."+methodName);
return null;
}
}
public class MethodProxyFactory{
public Class<?> targetInterface;
public MethodProxyFactory(Class<?> targetInterface){
this.targetInterface=targetInterface;
}
public Object newInstance(MethodProxy methodProxy){
return Proxy.newProxyInstance(targetInterface.getClassLoader(),new Class[]{targetInterface},methodProxy);
}
}
public interface SearchDao {
/**
* selectList
*
* @param msg
*/
public void selectList(String msg);
}
public interface SqlSession {
public void selectList(String msg);
}