静态代理
概念:
静态代理,是代理模式的一种实现方式,
它要求代理类 和 被代理类 实现同一个接口,
这样代理类就可以代替被代理类对象对外提供服务,
当代理类的方法被调用时,代理类会在调用被代理类方法的前后,添加一些公共的业务逻辑,
例如:日志记录、安全检查、事务管理等
静态代理的缺点:
当,被代理的接口,有很多方法时,代理类需要实现所有的方法,并添加相应的代理逻辑,
这会导致代理类非常庞大且难以维护,
此外,每增加一个新的接口,都需要创建一个新的代理类,这也增加了代码的复杂度,
因此,在实际应用中,动态代理(如:JDK动态代理、CGLIB动态代理)往往更加灵活和方便。
静态代理举例
首先,定义一个接口
public interface UserService {  void addUser(String username, String password);void deleteUser(String username);  }然后,实现被代理类(真实对象),实现UserService接口
public class UserServiceImpl implements UserService {  @Override  public void addUser(String username, String password) {  System.out.println("UserServiceImpl: Adding user with username = " + username);  }  @Override  public void deleteUser(String username) {  System.out.println("UserServiceImpl: Deleting user with username = " + username);  }  }再然后,创建静态代理类,同样实现UserService接口,并在内部持有被代理类的实例
public class UserServiceProxy implements UserService {  private UserService userService;  public UserServiceProxy(UserService userService) {  this.userService = userService;  }  @Override  public void addUser(String username, String password) {  // 在调用目标方法前添加一些逻辑  System.out.println("UserServiceProxy: Before adding user...");  // 调用目标方法  userService.addUser(username, password);  // 在调用目标方法后添加一些逻辑  System.out.println("UserServiceProxy: After adding user...");  }  @Override  public void deleteUser(String username) {  // 类似地,在调用目标方法前后添加逻辑  System.out.println("UserServiceProxy: Before deleting user...");  userService.deleteUser(username);  System.out.println("UserServiceProxy: After deleting user...");  }  }最后,在测试类中,通过静态代理类来调用被代理类的方法:
public class Client {  public static void main(String[] args) {  // 创建被代理对象  UserService userService = new UserServiceImpl();  // 创建代理对象,并将被代理对象传递给代理对象  UserService proxy = new UserServiceProxy(userService); // 通过代理对象调用方法  proxy.addUser("Alice", "password123");  proxy.deleteUser("Alice");  }  
}