前言
jdk动态代理被代理类必须是接口类
创建接口UserDao
public interface UserDao {
void save();
void find();
}
创建接口实现类UserDaoImpl
public class UserDaoImpl implements UserDao {
public void save() {
System.out.println("保存数据成功");
}
public void find() {
System.out.println("获取数据成功");
}
}
创建jdk动态代理类
/**
* 动态代理实现类
*/
public class ProxyFactory {
private Object target = null;
public ProxyFactory(Object target) {
this.target = target;
}
public Object getNewInstance() {
Object proxy = Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler() {
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
String methodName = method.getName();
Object result = null;
if("find".equals(methodName)) {
result = method.invoke(target, args);
} else {
System.out.println("开启事务");
result = method.invoke(target, args);
System.out.println("结束事务");
}
return result;
}
});
return proxy;
}
}
动态代理测试
/**
* JDK动态代理实现
*/
public class Action {
public static void main(String[] args) {
UserDao userDao = new UserDaoImpl();
UserDao userDaoProxy = (UserDao)new ProxyFactory(userDao).getNewInstance();
System.out.println("JDK动态代理");
userDaoProxy.save();
userDaoProxy.find();
}
}
来源:CSDN
作者:Insertor
链接:https://blog.csdn.net/qq_36493719/article/details/103703336