种一棵树最好的时间是十年前,其次是现在;
Mybatis中声明一个interface接口(如代码所示),没有编写任何实现类,Mybatis就能返回接口实例,并调用接口方法返回数据库数据,你知道为什么不?
public interface UserMapper {
User getUser(Integer userId);
List<User> getAllUser();
Map findName();
}
其中使用的就是动态代理;
动态代理的功能:通过拦截器方法回调,对目标target方法进行增强。
1、自定义增强mapper
自己实现一个 InvocationHandler ;
/**
* @author zhaojm
* @date 2020/4/11 21:29
*/
public class MapperProxy implements InvocationHandler {
// 新建一个增强Mapper
@SuppressWarnings("unchecked")
public <T> T newInstance(Class<T> clz) {
return (T) Proxy.newProxyInstance(clz.getClassLoader(), new Class[]{clz}, this);
}
@Override
public Object invoke(Object proxy, Method