1、介绍。

        先创建java代码,再进行编译。在运行前,代理类的.class文件已存在。事先知道要代理的是什么,通常只代理一个类。

        优点:不需要知道委托类(实现类),只需知道代理即可。

        缺点:(1)代码重复。代理类和委托类(实现类)实现了相同的接口。
                   (2)维护复杂。接口增加一个方法,代理类和委托类(实现类)都需要实现此方法。
                   (3)不灵活。代理类和委托类(实现类)的关系为一对一,无法一对多。

2、代码。Proxy.java、StaticProxyInherit.java、StaticProxy.java、UserServiceImpl.java、IUserService.java、User.java。

package com.zxj.test.proxy;

import com.zxj.dao.entity.User;
import com.zxj.dao.service.impl.UserServiceImpl;

public class Proxy {
    private static void staticProxy() {
        User user = new User();
        user.setAge(11);
        user.setName("卓小杰");

        //继承委托类(实现类)的方式
        StaticProxyInherit staticProxyInherit = new StaticProxyInherit();
        staticProxyInherit.printInfo(user);

        //实现接口的方式
        StaticProxy staticProxy = new StaticProxy(new UserServiceImpl());
        staticProxy.printInfo(user);
    }

    public static void main(String[] args) {
        staticProxy();
    }
}
package com.zxj.test.proxy;

import com.zxj.dao.entity.User;
import com.zxj.dao.service.impl.UserServiceImpl;

public class StaticProxyInherit extends UserServiceImpl {
    @Override
    public void printInfo(User user) {
        System.out.println("before to do someThing");
        super.printInfo(user);
        System.out.println("after to do someThing");
    }
}
package com.zxj.test.proxy;

import com.zxj.dao.entity.User;
import com.zxj.dao.service.IUserService;
import com.zxj.dao.service.impl.UserServiceImpl;

public class StaticProxy implements IUserService {
    private UserServiceImpl userService;

    public StaticProxy(UserServiceImpl userService) {
        this.userService = userService;
    }

    @Override
    public void printInfo(User user) {
        System.out.println("before to do someThing");
        userService.printInfo(user);
        System.out.println("after to do someThing");
    }
}
package com.zxj.dao.service.impl;

import com.zxj.dao.entity.User;
import com.zxj.dao.service.IUserService;

public class UserServiceImpl implements IUserService {
    @Override
    public void printInfo(User user) {
        System.out.println(String.format("%s已经%d岁了", user.getName(), user.getAge()));
    }
}
package com.zxj.dao.service;

import com.zxj.dao.entity.User;

public interface IUserService {
    void printInfo(User user);
}
package com.zxj.dao.entity;

public class User {
    private String name;
    private int age;

    public User(){

    }

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
3、结果。
<ignore_js_op>Java 静态代理_java