(1)按照代理的创建时期,代理类可以分为两种:
静态:由程序员创建代理类或特定工具自动生成源代码再对其编译。在程序运行前代理类的.class文件就已经存在了。
动态:在程序运行时运用反射机制动态创建而成。
(2)静态代理: 静态代理需要代理对象和目标对象实现一样的接口。
举例说明:
接口类: UserManager
1 public interface UserManager { 2 3 public void addUser(String username, String password); 4 5 public void delUser(int userId); 6 7 public String findUserById(int userId); 8 9 public void modifyUser(int userId, String username, String password); 10 }
目标对象:UserManagerImpl
1 public class UserManagerImpl implements UserManager { 2 3 public void addUser(String username, String password) { 4 System.out.println("---------UserManagerImpl.add()--------"); 5 } 6 7 public void delUser(int userId) { 8 System.out.println("---------UserManagerImpl.delUser()--------"); 9 } 10 11 public String findUserById(int userId) { 12 System.out.println("---------UserManagerImpl.findUserById()--------"); 13 return "张三"; 14 } 15 16 public void modifyUser(int userId, String username, String password) { 17 System.out.println("---------UserManagerImpl.modifyUser()--------"); 18 } 19 }
静态代理对象:UserManagerImplProxy 需要实现UserManager 接口!
1 public class UserManagerImplProxy implements UserManager { 2 private UserManager userManager; 3 public UserManagerImplProxy(UserManager userManager) { 4 this.userManager = userManager; 5 } 6 public void addUser(String username, String password) { 7 checkSecurity(); 8 userManager.addUser(username, password); 9 } 10 public void delUser(int userId) { 11 checkSecurity(); 12 userManager.delUser(userId); 13 } 14 public String findUserById(int userId) { 15 checkSecurity(); 16 return userManager.findUserById(userId); 17 } 18 public void modifyUser(int userId, String username, String password) { 19 checkSecurity(); 20 userManager.modifyUser(userId, username, password); 21 } 22 private void checkSecurity() { 23 System.out.println("-------checkSecurity-------"); 24 } 25 }
原文:https://www.cnblogs.com/fzdsy/p/11396876.html