手撕代码理解JDK静态代理

338 阅读1分钟
public class demo {

    public static void main(String[] args) {
        UserService userService = new UserServiceImpl();
        UserServicePorxy userServicePorxy = new UserServicePorxy(userService);
        userServicePorxy.select();
        userServicePorxy.update();

    }
}

interface UserService {
    void select();
    void update();
}

class UserServiceImpl implements UserService {

    @Override
    public void select() {
        System.out.println("查询数据");
    }

    @Override
    public void update() {
        System.out.println("更新数据");
    }
}

//静态代理
class UserServicePorxy implements UserService {
    private UserService userService;  //被代理对象

    public UserServicePorxy(UserService userService) {
        this.userService = userService;
    }

    @Override
    public void select() {
        before();
        userService.select();
        after();
    }

    @Override
    public void update() {
        before();
        userService.update();
        after();
    }

    private void before() {
        System.out.println("方法之前增加功能");
    }
    private void after() {
        System.out.println("方法之后增加功能");
    }
}

//执行结果

//查询数据
//方法之后增加功能
//方法之前增加功能
//更新数据
//方法之后增加功能