JDK动态代理的实现
UserMapper
public interface UserMapper {
void add(String username, String password);
}
UserMapperImpl
/**
* @Author: DengJia
* @Date: 2022/9/10
* @Description: JDK动态代理,目标类需要有实现接口,创建接口实现类的代理对象,通过代理对象来增强接口方法!
*/
public class UserMapperImpl implements UserMapper {
@Override
public void add(String username, String password) {
System.out.println("insert into db: [" + username + ", " + password + "]");
}
}
JDKProxy
/**
* @Author: DengJia
* @Date: 2022/9/10
* @Description: JDK动态代理的实现
*/
public class JDKProxy {
public static void main(String[] args) {
UserMapper userMapper = (UserMapper) Proxy.newProxyInstance(
JDKProxy.class.getClassLoader(),
new Class[]{UserMapper.class},
new UserMapperInvocationHandler(new UserMapperImpl())
);
userMapper.add("dengjia", "123456");
}
}
/**
* 创建代理对象
*/
class UserMapperInvocationHandler implements InvocationHandler {
private Object obj;
public UserMapperInvocationHandler(Object obj) {
this.obj = obj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// 方法之前
System.out.println("被增强的方法执行 之前!");
// 被增强的方法执行
Object res = method.invoke(obj, args);
// 方法之后
System.out.println("被增强的方法执行 之后!");
return res;
}
}
DJOSIMON