动态代理的概念
动态代理是程序在运行过程中自动创建一个代理对象来代替被代理的对象去执行相应的操作,例如, 我们有一个已经投入运行的项目中有一个用户DAO类UserDao用来对User对象进行数据库的增删改查操作,但是有一天,要求在对用户的增删改查操作时记录相应的日志,这是怎么办呢?难道我们去直接修改UserDao的源代码,然后在UserDao的每个方法中加入日志记录功能,这显然是不合理的,它违背了java的OCP原则,即对修改关闭对扩张开放。比如改现有的代码如下:
接口类
public interface IUserDao {
public void add(User user);
public User load(int id);
public void delete(int id);
public void update(User user);
}
实现类
public class UserDao implements IUserDao {
public void add(User user) {
System.out.println("user added:" + user);
}
public User load(int id) {
System.out.println("load user, id=" + id);
return null;
}
public void delete(int id) {
System.out.println("deleted user,