静态代理

参考出处:

参考原文出处:http://www.cnblogs.com/V1haoge/p/5860749.html

 

什么是代理?

如图:A要调C中的方法,有两条途径。

可以直接调用(红色渠道),也可以通过先调B,然后B调C(蓝色渠道);

在这里B就是A的代理。

 

代理分类:

代理可分为静态代理和动态代理。

静态代理:就是在加载的时候相关代理类就已经创建好了;

动态代理:在调用的时候再去创建。

 

静态代理:

静态代理包含接口、具体实现类、静态代理实现类三要素。

 

代码说明:

(1)接口

package com.zyq;

public interface UserService {

    /**
     * 吃
     * @param food 食物
     */
    void eat(String food);

}

 

(2)具体实现类

package com.zyq;

public class UserServiceImpl implements UserService {

    @Override
    public void eat(String food) {
        System.out.println("我吃了" + food);
    }

}

(3)静态代理实现类

package com.zyq;

public class UserStaticProxy implements UserService {

    @Override
    public void eat(String food) {
        System.out.println("前置:吃" + food + "前要洗手");
        new UserServiceImpl().eat(food);
        System.out.println("后置:吃" + food + "后要刷牙");
    }

}

测试类:

package com.zyq;

public class StaticProxyTest {

    public static void main(String[] args) {
        UserStaticProxy proxy = new UserStaticProxy();
        proxy.eat("面条");
    }
}

测试结果:

前置:吃面条前要洗手
我吃了面条
后置:吃面条后要刷牙

个人总结:

  1. 静态代理类在加载的时候就已经创建好了。
  2. 代理的时候,调用方并不知道具体的实现是哪个方法(动态代理同理);
  3. 静态代理的方法可以再调真正的方法之前加一些前置操作,也可以在方法之后加一些后置操作(动态代理同理);
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页