============ 静态代理编程 ============ 1 接口 /src/main/java/cn/tedu/proxy/UserService.java: public interface UserService { // 共同的接口 public void register(User user); public User login(String username, String password); } 2 原始类 /src/main/java/cn/tedu/proxy/UserServiceImpl.java: public class UserServiceImpl implements UserService { private Logger logger = Logger.getLogger(UserServiceImpl.class); @Override public void register(User user) { logger.debug("UserServiceImpl.register"); // 核心功能 } @Override public User login(String username, String password) { logger.debug("UserServiceImpl.login"); // 核心功能 return null; } } 3 代理类 /src/main/java/cn/tedu/proxy/UserServiceProxy.java: public class UserServiceProxy implements UserService { private Logger logger = Logger.getLogger(UserServiceProxy.class); private UserService userService; // 原始类对象 public UserServiceProxy(UserService userService) { this.userService = userService; } @Override public void register(User user) { logger.debug("UserServiceProxy.register"); // 辅助功能 userService.register(user); } @Override public User login(String username, String password) { logger.debug("UserServiceProxy.login"); // 辅助功能 return userService.login(username, password); } } 4 配置 /src/main/resources/applicationContext.xml: 5 测试 /src/test/java/cn/tedu/proxy/UserServiceTest.java: class UserServiceTest { @org.junit.jupiter.api.Test void testRegister() { ApplicationContext applicationContext = new ClassPathXmlApplicationContext( "/applicationContext.xml"); UserService userService = applicationContext.getBean( "userService", UserService.class); userService.register(new User("zhangfei", "123456")); } @org.junit.jupiter.api.Test void testLogin() { ApplicationContext applicationContext = new ClassPathXmlApplicationContext( "/applicationContext.xml"); UserService userService = applicationContext.getBean( "userService", UserService.class); userService.login("zhangfei", "123456"); } } UserServiceProxy.register UserServiceImpl.register UserServiceProxy.login UserServiceImpl.login 例程:Proxy 6 静态 public class UserServiceImpl implements UserService { ... } -- | public class UserServiceProxy implements UserService { | private UserService userService; <------------------------ ... } 这样的代理类只能代理与其实现了相同接口的原始类,并不是什么类都能代理。 需要手工编写代理类的源代码。 这样的代理叫做静态代理。