jdk的动态代理需要实现接口
代码如下
接口
public interface UserDao {
public void add();
public void update();
}
实现类
public class UserDaoImpl implements UserDao {
public void add() {
System.out.println("添加用户...");
}
public void update() {
System.out.println("修改用户...");
}
}
代理类
public class JDKProxy implements InvocationHandler{
private UserDao userDao;
public JDKProxy(UserDao userDao) {
super();
this.userDao = userDao;
}
public UserDao createProxy() {
UserDao proxy = (UserDao) Proxy.newProxyInstance(userDao.getClass()
.getClassLoader(), userDao.getClass().getInterfaces(), this);
return proxy;
}
// 调用目标对象的任何一个方法 都相当于调用invoke();
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
if("add".equals(method.getName())){
// 记录日志:
System.out.println("日志记录=================");
Object result = method.invoke(userDao, args);
return result;
}
return method.invoke(userDao, args);
}
}
测试
public class SpringTest1 {
@Test
public void demo2(){
// 被代理对象
UserDao userDao = new UserDaoImpl();
// 创建代理对象的时候传入被代理对象.
UserDao proxy = new JDKProxy(userDao).createProxy();
proxy.add();
proxy.update();
}
}